-1
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 时才能看到结果。

4

1 回答 1

1

问题就在这里

   IF XACT_STATE() = 0
        COMMIT TRAN

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

于 2012-10-17T02:15:42.750 回答