什么是僵尸交易?

And*_*zub 7 sql-server transactions

我偶然发现zombie transactionSqlTransaction代码中提到了.那么,什么是僵尸交易?

Qua*_*noi 8

僵尸事务是无法提交的事务(由于不可恢复的错误)但仍处于打开状态.

CREATE TABLE mytable (id INT NOT NULL PRIMARY KEY)
SET XACT_ABORT ON;
BEGIN TRY
        BEGIN TRANSACTION
                INSERT
                INTO    mytable
                VALUES  (1)
                INSERT
                INTO    mytable
                VALUES  (1)
        COMMIT
END TRY
BEGIN CATCH
        PRINT XACT_STATE()
        SELECT  *
        FROM    mytable
        ROLLBACK;
END CATCH
SELECT  *
FROM    mytable
Run Code Online (Sandbox Code Playgroud)

这里,第二个INSERT呈现交易僵尸.

它不能再写了,应该回滚,但你仍然可以读取它的范围(最内层SELECT返回一条记录;最外面的不返回).

  • 你需要一把砍刀或霰弹枪才能摆脱它!......伙计,我喜欢IT工作.80) (3认同)