在SQL Server中,如果事务失败,触发器是否会回滚?

15

我有一些触发器用于在某些表上执行函数,当某些东西被删除或更新时。在事务期间,如果触发器执行并且稍后在事务中被回滚,那么触发器也会被回滚吗?

2个回答

20

可以。

只要触发器是作为交易的一部分触发的,数据库中所做的任何更改也将被回滚。

请注意 - 触发器只是一个触发器,不会被回滚。触发器的影响将被回滚。


5

好的,如果在插入/更新/删除时真实的事务被回滚,那么触发器执行的任何操作都将被回滚。然而,如果你在一个事务中执行多个操作,则必须在代码中显式处理事务才能回滚到之前的操作。

所以,如果我从table1中删除并触发了触发器,然后事务失败,所有的操作都将被回滚。

如果我从table1中删除并触发了触发器,并且同时从应用程序发送的脚本、存储过程或动态SQL中删除了table2中的数据,则可能会发生两种情况。如果你有一个正式的显式事务(正确处理错误),则包括触发器操作在内的所有操作都会被回滚;如果你依赖于隐式事务(只回滚最后一个操作),那么它不会改变失败之前的任何部分。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接