網上看到的SET XACT_ABORT的用法~

來源:互聯網
上載者:User

指定當 Transact-SQL 陳述式產生執行階段錯誤時,Microsoft SQL Server 是否自動復原當前事務。

文法
SET XACT_ABORT { ON | OFF }

注釋
當 SET XACT_ABORT 為 ON 時,如果 Transact-SQL 陳述式產生執行階段錯誤,整個事務將終止並復原。為 OFF 時,只復原產生錯誤的 Transact-SQL 陳述式,而事務將繼續進行處理。編譯錯誤(如語法錯誤)不受 SET XACT_ABORT 的影響。

對於大多數 OLE DB 提供者(包括 SQL Server),隱性或明確交易中的資料修改語句必須將 XACT_ABORT 設定為 ON。唯一不需要該選項的情況是提供者支援嵌套事務時。有關更多資訊,請參見分散式查詢和分散式交易。

SET XACT_ABORT 的設定是在執行或運行時設定,而不是在分析時設定。

樣本
下例導致在含有其它 Transact-SQL 陳述式的事務中發生違反外鍵錯誤。在第一個語句集中產生錯誤,但其它語句均成功執行且事務成功提交。在第二個語句集中,SET XACT_ABORT 設定為 ON。這導致語句錯誤使批處理終止,並使交易回復。

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.