3 回答

TA貢獻1850條經驗 獲得超11個贊
SET XACT_ABORT ON
指示SQL Server回滾整個事務并在發生運行時錯誤時中止批處理。它涵蓋了在客戶端應用程序上發生的命令超時而不是SQL Server本身(默認XACT_ABORT OFF
設置未涵蓋)的情況。
由于查詢超時將使事務保持打開狀態,SET XACT_ABORT ON
因此建議在具有顯式事務的所有存儲過程中使用(除非您有特定的理由),因為應用程序在與開放事務的連接上執行工作的后果是災難性的。
Dan Guzman博客上有一個很棒的概述,

TA貢獻1830條經驗 獲得超9個贊
引用MSDN:
當SET XACT_ABORT為ON時,如果Transact-SQL語句引發運行時錯誤,則終止并回滾整個事務。當SET XACT_ABORT為OFF時,在某些情況下,僅回滾引發錯誤的Transact-SQL語句并繼續處理事務。
實際上,這意味著某些語句可能會失敗,使事務“部分完成”,并且調用者可能沒有出現此類失敗的跡象。
一個簡單的例子:
INSERT INTO t1 VALUES (1/0) INSERT INTO t2 VALUES (1/1) SELECT 'Everything is fine'
此代碼將在XACT_ABORT OFF時“成功”執行,并在XACT_ABORT為ON時終止,錯誤將終止(“INSERT INTO t2”將不會執行,客戶端應用程序將引發異常)。
作為一種更靈活的方法,您可以在每個語句(舊學校)之后檢查@@ ERROR,或使用TRY ... CATCH塊(MSSQL2005 +)。我個人更喜歡在沒有理由進行某些高級錯誤處理時設置XACT_ABORT。
- 3 回答
- 0 關注
- 1848 瀏覽
添加回答
舉報