【发布时间】:2012-02-17 20:00:09
【问题描述】:
我在某些表上有一些触发器,它们在删除或更新某些内容时执行一项功能。在事务期间,如果触发器执行后在事务中回滚,那么触发器是否也会回滚?
【问题讨论】:
标签: sql-server transactions triggers
我在某些表上有一些触发器,它们在删除或更新某些内容时执行一项功能。在事务期间,如果触发器执行后在事务中回滚,那么触发器是否也会回滚?
【问题讨论】:
标签: sql-server transactions triggers
是的。
只要触发器作为事务的一部分触发,数据库中的任何更改都会回滚。
Nitpick - 触发器是触发器,它不会被回滚。触发器的效果将是。
【讨论】:
好的,在插入/更新/删除时回滚的真实事务也将回滚触发器执行的任何操作。但是,如果您在事务中执行多个操作,则事务处理必须在您的代码中明确,以便回滚发生在早期操作中。
因此,如果我从 table1 中删除并且触发器触发,然后事务失败,则一切都会回滚。
如果我从表 1 中删除并且触发器触发并且我从表 2 中删除作为同一脚本的一部分或从应用程序发送的存储过程或动态 SQL,那么可能会发生两件事。如果您有一个正式的显式事务(正确处理错误),则发生的所有事情(包括触发操作)都会回滚,如果您依赖隐式事务(仅回滚最后一个操作),那么它不会在失败的部分。
【讨论】: