什么是僵尸交易?

时间:2010-10-28 13:39:07

标签: sql-server transactions

我意外发现zombie transaction代码中提到了SqlTransaction。那么,什么是僵尸交易?

1 个答案:

答案 0 :(得分: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

此处,第二个INSERT呈现交易僵尸。

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