日期:2014-05-17  浏览次数:20704 次

关于触发器中的回滚问题
在官方文档http://technet.microsoft.com/zh-cn/library/ms181299.aspx中“互操作性”段落中有这么一句:
    触发器继续执行 ROLLBACK 语句之后的所有其余语句。 如果这些语句中的任意语句修改数据,则不回滚这些修改。 执行其余的语句不会激发嵌套触发器。
其中“执行其余的语句不会激发嵌套触发器”,是否意味着在回滚操作后面的语句如果继续执行的话,后面语句触发的触发器就不会执行了。比如后面的语句有针对一个表的update操作,而这张表又有update的触发器,这个时候update会执行成功,但触发器不会执行?

------解决方案--------------------
嵌套触发器和你这句:是否意味着在回滚操作后面的语句如果继续执行的话,后面语句触发的触发器就不会执行了。是不一样的。你那句是顺序,不是嵌套,
------解决方案--------------------
引用:
在官方文档http://technet.microsoft.com/zh-cn/library/ms181299.aspx中“互操作性”段落中有这么一句:
    触发器继续执行 ROLLBACK 语句之后的所有其余语句。 如果这些语句中的任意语句修改数据,则不回滚这些修改。 执行其余的语句不会激发嵌套触发器。

其中“执行其余的语句不会激发嵌套触发器”,是否意味着在回滚操作后面的语句如果继续执行的话,后面语句触发的触发器就不会执行了。比如后面的语句有针对一个表的update操作,而这张表又有update的触发器,这个时候update会执行成功,但触发器不会执行?


注意,在你发的连接中,只是说,在触发器中rollback之后,可以继续执行触发器中的rollback之后的语句,如果在你的触发器中,后面还有update语句,而update语句会触发另一个表的触发器,那么这个update操作应该是可以执行的,但不会引起update触发器。

因为,这种情况下,也就是在一个触发器中引起另一个触发器,就是所谓的嵌套触发器。
所以嵌套触发器