SET XACT_ABORT
指定當(dāng) Transact-SQL 語句產(chǎn)生運(yùn)行時錯誤時,Microsoft® SQL Server™ 是否自動回滾當(dāng)前事務(wù)。
語法
SET XACT_ABORT { ON | OFF }
注釋
當(dāng) SET XACT_ABORT 為 ON 時,如果 Transact-SQL 語句產(chǎn)生運(yùn)行時錯誤,整個事務(wù)將終止并回滾。為 OFF 時,只回滾產(chǎn)生錯誤的 Transact-SQL 語句,而事務(wù)將繼續(xù)進(jìn)行處理。編譯錯誤(如語法錯誤)不受 SET XACT_ABORT 的影響。
對于大多數(shù) OLE DB 提供程序(包括 SQL Server),隱性或顯式事務(wù)中的數(shù)據(jù)修改語句必須將 XACT_ABORT 設(shè)置為 ON。唯一不需要該選項(xiàng)的情況是提供程序支持嵌套事務(wù)時。有關(guān)更多信息,請參見分布式查詢和分布式事務(wù)。
SET XACT_ABORT 的設(shè)置是在執(zhí)行或運(yùn)行時設(shè)置,而不是在分析時設(shè)置。
示例
下例導(dǎo)致在含有其它 Transact-SQL 語句的事務(wù)中發(fā)生違反外鍵錯誤。在第一個語句集中產(chǎn)生錯誤,但其它語句均成功執(zhí)行且事務(wù)成功提交。在第二個語句集中,SET XACT_ABORT 設(shè)置為 ON。這導(dǎo)致語句錯誤使批處理終止,并使事務(wù)回滾。
CREATE TABLE t1 (a int PRIMARY KEY)
CREATE TABLE t2 (a int 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 TRAN
INSERT INTO t2 VALUES (1)
INSERT INTO t2 VALUES (2) /* Foreign key error */
INSERT INTO t2 VALUES (3)
COMMIT TRAN
GO
SET XACT_ABORT ON
GO
BEGIN TRAN
INSERT INTO t2 VALUES (4)
INSERT INTO t2 VALUES (5) /* Foreign key error */
INSERT INTO t2 VALUES (6)
COMMIT TRAN
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
DROP TABLE t2
DROP TABLE t1
GO
posted on 2008-05-06 13:29
周銳 閱讀(405)
評論(0) 編輯 收藏 所屬分類:
SQL Server