有未提交的交易

时间:2012-10-17 02:05:27

标签: sql sql-server

SET XACT_ABORT ON

BEGIN TRY
  BEGIN TRAN    

   INSERT INTO dbo.Student
     (FirstName, LastName)
   VALUES 
     ('Jon','Ye')

   IF XACT_STATE() = 0
     COMMIT TRAN

END TRY
BEGIN CATCH

  IF XACT_STATE() <> 1
    ROLLBACK TRAN
  ELSE
    COMMIT TRANSACTION

END CATCH

RETURN
GO

错误讯息:

  

有未提交的交易。

我只关闭SQL Server时才会看到结果。

1 个答案:

答案 0 :(得分:1)

问题出在这里

   IF XACT_STATE() = 0
        COMMIT TRAN

如果不存在活动用户事务,则XACT_STATE()仅返回0。由于BEGIN TRAN启动的开放事务,XACT_STATE必须返回1,因此COMMIT TRAN不会执行。您应该检查返回值为1