小知識
-
- 交易中資料表會持續鎖定至交易結束或是連線結束
- 最外層的交易 `ROLLBACK`,內層就算 `COMMIT` 依然會復原變更
- 巢狀交易過程中的資料表都會鎖定直到交易結束,外層交易 `COMMIT` 內層交易卻沒有 `COMMIT` 資料表會被鎖定不會釋放
- 交易前加上 `SET XACT_ABORT ON` 可防止過程中發生錯誤沒有 `ROLLBACK` 造成鎖表的問題
範例
-- SET XACT_ABORT ON -- SELECT * FROM ##TableA -- DROP TABLE ##TableA CREATE TABLE ##TableA ( Id INT, CName NVARCHAR(32) ) INSERT INTO ##TableA ( Id, CName ) VALUES ( 1, 'aaaaa' ), ( 2, 'bbbbb' ) BEGIN TRAN Test1 UPDATE ##TableA SET CName = 'ccccc' WHERE Id = 1 BEGIN TRAN Test2 UPDATE ##TableA SET CName = 'dddddd' WHERE Id = 2 -- COMMIT TRAN Test2 -- ROLLBACK TRAN Test2 -- COMMIT TRAN Test1 -- ROLLBACK TRAN Test1