语法

SET XACT_ABORT { ON | OFF }

注释

当 SET XACT_ABORT 为 ON 时,如果 Transact-SQL 语句产生运行时错误,整个事务将终止并回滚。为 OFF 时,只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。编译错误(如语法错误)不受 SET XACT_ABORT 的影响。

对于大多数 OLE DB 提供程序(包括 SQL Server),隐性或显式事务中的数据修改语句必须将 XACT_ABORT 设置为 ON。唯一不需要该选项的情况是提供程序支持嵌套事务时。

下例导致在含有其它 Transact-SQL 语句的事务中发生违反外键错误。在第一个语句集中产生错误,但其它语句均成功执行且事务成功提交。在第二个语句集中,SET XACT_ABORT 设置为 ON。这导致语句错误使批处理终止,并使事务回滚。


事务的回滚设置(SET XACT_ABORT)CREATE TABLE t1 (a int PRIMARY KEY)
事务的回滚设置(SET XACT_ABORT)
CREATE TABLE t2 (a int REFERENCES t1(a))
事务的回滚设置(SET XACT_ABORT)
GO
事务的回滚设置(SET XACT_ABORT)
INSERT INTO t1 VALUES (1)
事务的回滚设置(SET XACT_ABORT)
INSERT INTO t1 VALUES (3)
事务的回滚设置(SET XACT_ABORT)
INSERT INTO t1 VALUES (4)
事务的回滚设置(SET XACT_ABORT)
INSERT INTO t1 VALUES (6)
事务的回滚设置(SET XACT_ABORT)
GO
事务的回滚设置(SET XACT_ABORT)
SET XACT_ABORT OFF
事务的回滚设置(SET XACT_ABORT)
GO
事务的回滚设置(SET XACT_ABORT)
BEGIN TRAN
事务的回滚设置(SET XACT_ABORT)
INSERT INTO t2 VALUES (1)

相关文章: