小知識
-
- 交易中資料表會持續鎖定至交易結束或是連線結束
- 最外層的交易
ROLLBACK
,內層就算COMMIT
依然會復原變更 - 巢狀交易過程中的資料表都會鎖定直到交易結束,外層交易
COMMIT
內層交易卻沒有COMMIT
資料表會被鎖定不會釋放 - 交易前加上
SET XACT_ABORT ON
可防止過程中發生錯誤沒有ROLLBACK
造成鎖表的問題
範例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
-- 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 |