觸發器中回滾中需要注意的地方


  • 在官方文檔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
*/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM