-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

エラーメッセージ:

コミットされていないトランザクションがあります。

SQLServerを閉じたときにのみ結果が表示されます。

4

1 に答える 1

1

問題はここにあります

   IF XACT_STATE() = 0
        COMMIT TRAN

XACT_STATE()は、アクティブなユーザートランザクションが存在しない場合にのみ0を返します。BEGIN TRANによって開始されたオープントランザクションのため、XACT_STATEは1を返す必要があり、その結果、COMMITTRANは実行されません。1の戻り値をチェックする必要があります

于 2012-10-17T02:15:42.750 に答える