首页 > 解决方案 > 触发器是否作为 SQL Server 中事务的一部分出现

问题描述

我在 SQL Server 中有三个表:

  1. 员工
  2. 员工详情
  3. 员工履历

我在表上写了一个触发器,Employee这样如果条目被插入Employee,那么它也会在其中插入一行EmployeeHistory;这工作正常。

现在我已经创建了带有事务的存储过程并将记录插入到Employee,然后EmployeeDetails。插入记录后Employee,如果有任何问题并且事务回滚,那么插入的行是否EmployeeHistory也会被删除?

标签: sql-serverdatabase

解决方案


默认情况下,该选项XACT_ABORT位于ON触发器中。 可以在这里看到。当此功能为ON时,发生的任何错误都会中断/中止批处理,因此您的整个事务将被回滚。

微软文档说

当 SET XACT_ABORT 为 ON 时,如果 Transact-SQL 语句引发运行时错误,则整个事务将终止并回滚。

当 SET XACT_ABORT 为 OFF 时,在某些情况下,只有引发错误的 Transact-SQL 语句被回滚,事务继续处理。根据错误的严重程度,即使 SET XACT_ABORT 为 OFF,也可能回滚整个事务。


推荐阅读