在官方文档中“互操作性”段落中有这么一句:
-
触发器继续执行 ROLLBACK 语句之后的所有其余语句。 如果这些语句中的任意语句修改数据,则不回滚这些修改。 执行其余的语句不会激发嵌套触发器。
其中“执行其余的语句不会激发嵌套触发器”,是否意味着在回滚操作后面的语句如果继续执行的话,后面语句触发的触发器就不会执行了。比如后面的语句有针对一个表的update操作,而这张表又有update的触发器,这个时候update会执行成功,但触发器不会执行?
以下是网友帮忙写的测试用例,结果是触发了嵌套事务,此实验结果经过亲自验证:
--drop table t1--drop table t2create table t1(id int)create table t2(id int)insert into t2values(100)gocreate trigger dbo.trigger_t1on t1for insertasrollback;select '这是rollback之后的语句,这里能执行'update t2set id = 1;gocreate trigger dbo.trigger_t2on t2for updateasselect '这是t2的update触发器,这里能执行'go--插入数据insert into t1values(1)/*这是rollback之后的语句,这里能执行这是t2的update触发器,这里能执行消息 3609,级别 16,状态 1,第 3 行事务在触发器中结束。批处理已中止。*/ --没有记录select * from t1select * from t2/*id1*/