2010-10-28 140 views

回答

7

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

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返回记录;最外层不是)。

+3

你需要一把砍刀或霰弹枪才能摆脱它!男人,我爱我。工作。 80) – Keng 2010-10-28 13:47:09