与事务结合触发

vel*_*ije 27 trigger sql-server transaction

假设我们有以下情况:

我们有一张桌子(比方说Table_A),它有一个触发器INSERT。触发器作业是table_B根据 中插入的值更新 中的某些行table_A

现在,当我们简单地在表中插入一行时一切正常,但是我们通过事务插入数据的情况呢?触发器会等到所有事务语句成功运行,还是会在识别到插入时触发?。如果触发器在识别出第一个插入时立即触发,如果事务在最后一行失败会发生什么?这种情况有什么机制吗?

Mar*_*ith 40

插入总是在事务中。

如果您没有明确的BEGIN TRAN ... COMMITorSET IMPLICIT_TRANSACTIONS ON语句,则该语句将作为自包含的自动提交事务运行

对于触发触发器的操作,触发器始终是事务的一部分。如果触发器中发生导致事务回滚的错误,则触发操作也将回滚。

触发器隐式XACT_ABORT开启。启用此设置的错误将自动导致事务回滚(带有RAISERROR语句的代码中引发的错误除外)。