隐式事务(转)
隱式事務模式,在這種模式中,SQL Server在沒有事務存在的情況下會開始一個事務,但不會像在自動模式中那樣自動執行COMMIT 或ROLLBACK 語句。隱式事務必須顯式結束(既Commit 或者Rollback)。以下語句在沒有事務時隱式開始一個事務。?
?
| ALTER TABLE | GRANT | FETCH | DELETE |
| CREATE | REVOKE | INSERT | SELECT |
| DROP | OPEN | UPDATE | TRUNCATE TABLE |
?
?
??????? 使用隱式事務
1.??? 啟動SQL Server Management Studio并打開一個“新建查詢”窗口。
2.??? 鍵入并執行以下語句來設置連接為隱式事務模式(此例的代碼包含在示例文件UsingImplicitTransactions.sql中):
?SET IMPLICIT_TRANSACTIONS ON;
GO?
3.??? 執行以下代碼創建一個表檢驗是否已啟動事務:
CREATE TABLE T1
??? ?(i int PRIMARY KEY);
4.??? 用@@TRANCOUNT來測試是否已經打開一個事務。執行如下所示的SELECT語句:
SELECT @@TRANCOUNT AS [Transaction Count];
5.??? 結果是1,意思是當前連接已經打開了一個事務。0的意思是當前沒有事務,一個大于1的數的意思是有嵌套事務(詳見后文)。
6.??? 現在執行以下語句在表中插入一行并再次檢查@@TRANCOUNT:
INSERT INTO T1 VALUES(5);
GO
SELECT @@TRANCOUNT AS [Transaction Count];
?????? @@TRANCOUNT的值仍然是1。由于已經有一個打開的事務,因此SQL Server沒有開始一個新的事務。
7.??? 這個時候必須提交或者回滾事務,不然等到會話結束,表仍然是鎖住,因為事務沒有提交。現在執行以下語句回滾這個事務并再次檢查@@TRANCOUNT。可以看出,在ROLLBACK TRAN 語句執行之后,@@TRANCOUNT 的值變成了0。
ROLLBACK TRAN
GO
SELECT @@TRANCOUNT AS [Transaction Count];
8.??? 嘗試對表T1執行SELECT語句:
SELECT * FROM T1;
9.??? 由于表不復存在,所以會得到一個錯誤信息。這個隱式事務起始于CREATE TABLE語句,并且ROLLBACK TRAN語句取消了第一個語句后所做的所有工作。
10.?? 執行以下代碼關閉隱式事務:
SET IMPLICIT_TRANSACTIONS OFF;
轉載于:https://www.cnblogs.com/kingcat/archive/2011/12/23/2299817.html
總結
- 上一篇: C语言中的结构体,联合,链表和枚举,位域
- 下一篇: 字节排序函数