假设我们有以下情况:
我们有一张桌子(比方说Table_A
),上面有一个触发器INSERT
。触发器作业是table_B
根据插入的值更新table_A
.
现在,当我们简单地在表中插入一行时一切都好,但是我们通过事务插入数据的情况呢?触发器会等到所有事务语句成功运行,还是在识别插入时触发?如果触发器在识别到第一个插入时立即触发,如果最后一行的事务失败会发生什么?这种情况有什么机制吗?
假设我们有以下情况:
我们有一张桌子(比方说Table_A
),上面有一个触发器INSERT
。触发器作业是table_B
根据插入的值更新table_A
.
现在,当我们简单地在表中插入一行时一切都好,但是我们通过事务插入数据的情况呢?触发器会等到所有事务语句成功运行,还是在识别插入时触发?如果触发器在识别到第一个插入时立即触发,如果最后一行的事务失败会发生什么?这种情况有什么机制吗?
插入始终在事务中。
如果您没有明确的
BEGIN TRAN ... COMMIT
或SET IMPLICIT_TRANSACTIONS ON
然后该语句作为自包含的自动提交事务运行。触发器始终是触发触发器的操作的事务的一部分。如果触发器中发生导致事务回滚的错误,则触发操作也将回滚。
触发器隐含地具有
XACT_ABORT
。启用此设置的错误将自动导致事务回滚(RAISERROR
语句代码中引发的错误除外)。