您的位置:首页 > 其它

SET XACT_ABORT { ON | OFF }

2011-11-06 14:24 477 查看
SET XACT_ABORT { ON | OFF }
2011-05-23 09:40

语法

SET XACT_ABORT { ON | OFF }

注释

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

当 SET XACT_ABORT 为 OFF 时,有时只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。如果错误很严重,那么即使 SET XACT_ABORT 为 OFF,也可能回滚整个事务。OFF 是默认设置。

编译错误(如语法错误)不受 SET XACT_ABORT 的影响。

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

SET XACT_ABORT 的设置是在执行或运行时设置,而不是在分析时设置。

示例

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

USE AdventureWorks2008R2;

GO IF OBJECT_ID(N't2', N'U') IS NOT NULL

DROP TABLE t2;

GO IF OBJECT_ID(N't1', N'U') IS NOT NULL

DROP TABLE t1;

GO

CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY);

CREATE TABLE t2 (a INT NOT NULL REFERENCES t1(a));

GO

INSERT INTO t1 VALUES (1);

INSERT INTO t1 VALUES (3);

INSERT INTO t1 VALUES (4);

INSERT INTO t1 VALUES (6);

GO

SET XACT_ABORT OFF;

GO

BEGIN TRANSACTION;

INSERT INTO t2 VALUES (1);

INSERT INTO t2 VALUES (2); -- Foreign key error.

INSERT INTO t2 VALUES (3);

COMMIT TRANSACTION;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

GO

SET XACT_ABORT ON;

GO

BEGIN TRANSACTION;

INSERT INTO t2 VALUES (4);

INSERT INTO t2 VALUES (5); -- Foreign key error.

INSERT INTO t2 VALUES (6);

COMMIT TRANSACTION;

GO

-- SELECT shows only keys 1 and 3 added. -- Key 2 insert failed and was rolled back, but -- XACT_ABORT was OFF and rest of transaction-- succeeded. -- Key 5 insert error with XACT_ABORT ON caused -- all
of the second transaction to roll back.

SELECT * FROM t2;

GO
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: