2011年1月27日 星期四

SQL Server - 交易控制 - XACT_ABORT

在這一次的SQL Hero的比賽中,有一個題目讓我印像深刻,那就是關於 XACT_ABORT 的使用,此指令主要用於交易的控制,相關的參考資訊如下,關於當天的題目如下分享給大家參考。

問答題目:
SET XACT_ABORT OFF;
CREATE TABLE t(P INT UNIQUE)
BEGIN TRAN
INSERT t VALUES(1)
INSERT t VALUES(1),(2)  -> 寫入失敗
INSERT t VALUES(3)
COMMIT TRAN
執行後資料表有幾筆紀錄?
ANS:2筆,因為第二筆寫入時因為唯一值的限制,所以整筆取消,所以只有寫入第一筆與第三筆記錄。

確認目前的環境設定值:
如果要確認目前的環境設定值,可以透過下列的指令來確認,系統預設值為OFF。

指令:DBCC USEROPTIONS
參考網址:http://msdn.microsoft.com/zh-tw/library/ms180065.aspx




MSDN說明:
當 SET XACT_ABORT 是 ON 時,如果 Transact-SQL 陳述式產生執行階段錯誤,就會終止和回復整個交易。
當 SET XACT_ABORT 是 OFF 時,在某些情況下,只會回復產生錯誤的 Transact-SQL 陳述式,交易會繼續進行。隨著錯誤嚴重性而不同,即使 SET XACT_ABORT 是 OFF,也有可能回復整個交易。OFF 是預設值。
SET XACT_ABORT 不會影響到如語法錯誤之類的編譯錯誤。
針對大部分 OLE DB 提供者 (包括 SQL Server) 的隱含或明確的交易,其中之資料修改陳述式的 XACT_ABORT 都必須設為 ON。只有在提供者支援巢狀交易時,才不需要這個選項。如需詳細資訊,請參閱<分散式查詢與分散式交易>。
SET XACT_ABORT 的設定是在執行階段進行設定,而不是在剖析階段進行設定。

沒有留言:

張貼留言