Leo Yeh's Blog

SQL Server 錯誤處理 (2)

基本介紹

教學目標

初步了解 SQL Server 中錯誤處理之自動回復交易的基本概念。

重點概念

首先我們可以透過 XACT_ABORT 指定當 T-SQL 陳述式在執行階段發生錯誤時,T-SQL 將會自動回覆目前的交易。當 XACT_ABOUT 為 ON 時,若 T-SQL 陳述式發生執行階段錯誤時,就會終止和回復整個交易。反之,當 XACT_ABOUT 為 OFF 時,若 T-SQL 陳述式發生執行階段錯誤時,交易會繼續進行,並且適著錯誤嚴重性的不同,也有可能回復整個交易,至於 XACT_ABOUT 的預設值為 OFF。

設定 XACT_ABOUT 語法

1
SET XACT_ABORT { ON | OFF }

接著 XACT_ABOUT 的設定主要是在執行階段進行設定,而不是在剖析階段進行設定,此外我們可以透過下述指令檢視目前 XACT_ABOUT 的設定。

1
2
3
DECLARE @XACT_ABORT VARCHAR(3) = 'OFF';  
IF ( (16384 & @@OPTIONS) = 16384 ) SET @XACT_ABORT = 'ON';
SELECT @XACT_ABORT AS XACT_ABORT;

再來當 XACT_ABORT 為 ON 時,若在 TRY 區塊內發生發生條件約束違規錯誤時將會使得交易狀態為失效,此時交易便會被分類為無法認可的交易。無法認可的交易只能執行讀取作業或者進行回滾交易,這個交易將無法執行產生寫入作業或交易承諾的任何 T-SQL 陳述式。若是交易被分類為無法認可的交易,則 XACT_STATE 函數將會回傳 -1 值,並且當批次完成時,資料庫引擎將會回復任何使用中無法認可的交易,

最後我們主要可以透過 XACT_STATE 檢測目前是否有作用中的交易,以及是否需要進行回復交易,其中 XACT_STATE 函數回傳值主要有 1、0 和 -1,請參考下表。

回傳值 意義
1 交易是可被承諾。
0 交易是不可被承諾和應該進行滾回。
-1 交易是無法被認可應該會產生承諾和滾回的錯誤。

相關資源

⬅️ Go back