問答題目:
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 的設定是在執行階段進行設定,而不是在剖析階段進行設定。
沒有留言:
張貼留言