SET XACT_ABORT
指定當 Transact-SQL 語句產生運行時錯誤時,Microsoft® SQL Server™ 是否自動回滾當前事務。 語法 SET XACT_ABORT { ON | OFF } 注釋 當 SET XACT_ABORT 為 ON 時,如果 Transact-SQL 語句產生運行時錯誤,整個事務將終止并回滾。為 OFF 時,只回滾產生錯誤的 Transact-SQL 語句,而事務將繼續(xù)進行處理。編譯錯誤(如語法錯誤)不受 SET XACT_ABORT 的影響。 對于大多數(shù) OLE DB 提供程序(包括 SQL Server),隱性或顯式事務中的數(shù)據(jù)修改語句必須將 XACT_ABORT 設置為 ON。唯一不需要該選項的情況是提供程序支持嵌套事務時。有關更多信息,請參見分布式查詢和分布式事務。 SET XACT_ABORT 的設置是在執(zhí)行或運行時設置,而不是在分析時設置。 示例 下例導致在含有其它 Transact-SQL 語句的事務中發(fā)生違反外鍵錯誤。在第一個語句集中產生錯誤,但其它語句均成功執(zhí)行且事務成功提交。在第二個語句集中,SET XACT_ABORT 設置為 ON。這導致語句錯誤使批處理終止,并使事務回滾。 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 |
|
來自: Long_way > 《數(shù)據(jù)庫》