0

私が投稿した質問から私の問題の1つに対する答えを得ましたここをクリック

私はこの解決策を得ました

BEGIN TRY
BEGIN TRANSACTION 
    exec( @sqlHeader)
    exec(@sqlTotals)
    exec(@sqlLine)
COMMIT
 END TRY
 BEGIN CATCH

IF @@TRANCOUNT > 1
    ROLLBACK
 END CATCH

解決策を取得した後、新しい問題に直面しています。ストアド プロシージャが初めて実行されたときに正常に動作し、その後、次のエラーが発生します。

EXECUTE 後のトランザクション数は、BEGIN ステートメントと COMMIT ステートメントの数が一致していないことを示しています。前のカウント = 1、現在のカウント = 0。

あなたの助けが必要です。

ありがとう

4

1 に答える 1

0

コードに誤りがあるため、エラーが発生し、ロールバックが行われていません。ロールバックとそのチェックは次のようになります。

IF @@TRANCOUNT > 0
    ROLLBACK
 END CATCH

コミット後、@@TRANCOUNT はゼロになります。エラーが発生した場合、@@TRANCOUNT は 1 になります。元のコードでは、ロールバックはトリガーされませんでしたが、トリガーされるはずです。

于 2013-02-21T22:59:14.710 に答える