SET XACT_ABORT
指定當(dāng) Transact-SQL 語句產(chǎn)生運(yùn)行時(shí)錯(cuò)誤時(shí),Microsoft® SQL Server™ 是否自動回滾當(dāng)前事務(wù)。
語法
SET XACT_ABORT { ON | OFF }
注釋
當(dāng) SET XACT_ABORT 為 ON 時(shí),如果 Transact-SQL 語句產(chǎn)生運(yùn)行時(shí)錯(cuò)誤,整個(gè)事務(wù)將終止并回滾。為 OFF 時(shí),只回滾產(chǎn)生錯(cuò)誤的 Transact-SQL 語句,而事務(wù)將繼續(xù)進(jìn)行處理。編譯錯(cuò)誤(如語法錯(cuò)誤)不受 SET XACT_ABORT 的影響。
對于大多數(shù) OLE DB 提供程序(包括 SQL Server),隱性或顯式事務(wù)中的數(shù)據(jù)修改語句必須將 XACT_ABORT 設(shè)置為 ON。唯一不需要該選項(xiàng)的情況是提供程序支持嵌套事務(wù)時(shí)。有關(guān)更多信息,請參見分布式查詢和分布式事務(wù)。
SET XACT_ABORT 的設(shè)置是在執(zhí)行或運(yùn)行時(shí)設(shè)置,而不是在分析時(shí)設(shè)置。
示例
下例導(dǎo)致在含有其它 Transact-SQL 語句的事務(wù)中發(fā)生違反外鍵錯(cuò)誤。在第一個(gè)語句集中產(chǎn)生錯(cuò)誤,但其它語句均成功執(zhí)行且事務(wù)成功提交。在第二個(gè)語句集中,SET XACT_ABORT 設(shè)置為 ON。這導(dǎo)致語句錯(cuò)誤使批處理終止,并使事務(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ù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點(diǎn)擊舉報(bào)。