[MSSQL] SQL Server 的一些眉眉角角 part.2

小知識

    1. 交易中資料表會持續鎖定至交易結束或是連線結束
    2. 最外層的交易 `ROLLBACK`,內層就算 `COMMIT` 依然會復原變更
    3. 巢狀交易過程中的資料表都會鎖定直到交易結束,外層交易 `COMMIT` 內層交易卻沒有 `COMMIT` 資料表會被鎖定不會釋放
    4. 交易前加上 `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

 



這裡的資訊對您有用嗎?歡迎斗內給我