当事务DML操作抛出异常时,触发器中会发生什么

时间:2016-05-11 09:36:55

标签: sql-server triggers transactions

以下SQLServer代码:

BEGIN TRY

  BEGIN TRANSACTION TRAN
    UPDATE Authors
    SET Phone = '415 354-9866'
    WHERE au_id = '724-80-9391';

  COMMIT TRAN    
END TRY

BEGIN CATCH 
   ROLLBACK TRAN
END CATCH

在authors表中有一个触发器。更新前的均值触发器将新记录插入临时表。查询:

  1. 如果在authors表中更新时发生异常。因为触发器同时插入新记录。新记录是否会作为选择更新语句回滚在事务内部?
  2. 如果在插入新记录时在侧触发器中发生异常,那么会发生什么意味着它会更新或回滚作者表?

1 个答案:

答案 0 :(得分:1)

事务的概念是:如果执行回滚,则数据库将恢复为与事务实际启动时相同的状态。

遵循此概念,此事务中的任何触发器所做的所有更改也都会回滚。

实际上,即使没有显式事务,同样应该适用于单个语句(如在您的示例中) - 此单个语句然后创建隐式事务,并且触发器执行是此事务的一部分。如果有任何失败,隐式事务也会回滚,包括触发器的更改,使数据库保持原样。

这是数据库确保数据一致性的唯一方法!