SET XACT_ABORT
指定當 Transact-SQL 語(yǔ)句產(chǎn)生運行時(shí)錯誤時(shí),Microsoft® SQL Server™ 是否自動(dòng)回滾當前事務(wù)。
語(yǔ)法
SET XACT_ABORT { ON | OFF }
注釋
當 SET XACT_ABORT 為 ON 時(shí),如果 Transact-SQL 語(yǔ)句產(chǎn)生運行時(shí)錯誤,整個(gè)事務(wù)將終止并回滾。為 OFF 時(shí),只回滾產(chǎn)生錯誤的 Transact-SQL 語(yǔ)句,而事務(wù)將繼續進(jìn)行處理。編譯錯誤(如語(yǔ)法錯誤)不受 SET XACT_ABORT 的影響。
對于大多數 OLE DB 提供程序(包括 SQL Server),隱性或顯式事務(wù)中的數據修改語(yǔ)句必須將 XACT_ABORT 設置為 ON。唯一不需要該選項的情況是提供程序支持嵌套事務(wù)時(shí)。有關(guān)更多信息,請參見(jiàn)分布式查詢(xún)和分布式事務(wù)。
SET XACT_ABORT 的設置是在執行或運行時(shí)設置,而不是在分析時(shí)設置。
示例
下例導致在含有其它 Transact-SQL 語(yǔ)句的事務(wù)中發(fā)生違反外鍵錯誤。在第一個(gè)語(yǔ)句集中產(chǎn)生錯誤,但其它語(yǔ)句均成功執行且事務(wù)成功提交。在第二個(gè)語(yǔ)句集中,SET XACT_ABORT 設置為 ON。這導致語(yǔ)句錯誤使批處理終止,并使事務(wù)回滾。
CREATE TABLE t1 (a int PRIMARY KEY)CREATE TABLE t2 (a int REFERENCES t1(a))GOINSERT INTO t1 VALUES (1)INSERT INTO t1 VALUES (3)INSERT INTO t1 VALUES (4)INSERT INTO t1 VALUES (6)GOSET XACT_ABORT OFFGOBEGIN TRANINSERT INTO t2 VALUES (1)INSERT INTO t2 VALUES (2) /* Foreign key error */INSERT INTO t2 VALUES (3)COMMIT TRANGOSET XACT_ABORT ONGOBEGIN TRANINSERT INTO t2 VALUES (4)INSERT INTO t2 VALUES (5) /* Foreign key error */INSERT INTO t2 VALUES (6)COMMIT TRANGO/* 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 t2GODROP TABLE t2DROP TABLE t1GO
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。