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