- 在官方文檔http://technet.microsoft.com/zh-cn/library/ms181299.aspx中“互操作性”段落中有這么一句:
-
觸發器繼續執行 ROLLBACK 語句之后的所有其余語句。 如果這些語句中的任意語句修改數據,則不回滾這些修改。 執行其余的語句不會激發嵌套觸發器。
其中“執行其余的語句不會激發嵌套觸發器”,是否意味着在回滾操作后面的語句如果繼續執行的話,后面語句觸發的觸發器就不會執行了?
比如后面的語句有針對一個表的update操作,而這張表又有update的觸發器,這個時候update會執行成功,但觸發器不會執行?
以下是網友幫忙寫的測試用例,結果是觸發了嵌套事務,此實驗結果經過親自驗證:
--drop table t1 --drop table t2 create table t1(id int) create table t2(id int) insert into t2 values(100) go create trigger dbo.trigger_t1 on t1 for insert as rollback; select '這是rollback之后的語句,這里能執行' update t2 set id = 1; go create trigger dbo.trigger_t2 on t2 for update as select '這是t2的update觸發器,這里能執行' go --插入數據 insert into t1 values(1) /* 這是rollback之后的語句,這里能執行 這是t2的update觸發器,這里能執行 消息 3609,級別 16,狀態 1,第 3 行 事務在觸發器中結束。批處理已中止。 */ --沒有記錄 select * from t1 select * from t2 /* id 1 */