複数の挿入のトランザクションを作成しようとしていますが、いずれかが失敗した場合はすべてをロールバックします。私はこれを持っていることがわかった例に基づいてSQL Server - トランザクションの正しい構文
BEGIN TRY
BEGIN TRAN
INSERT1
INSERT2
INSERT3
INSERT4
COMMIT TRAN
END TRY
BEGIN CATCH
IF (@@TRANCOUNT > 0)
BEGIN
ROLLBACK TRANSACTION;
END;
INSERT INTO Errors (errornumber, errorseverity, errorstate, errorprocedure, errorline, errormessage)
VALUES (ERROR_NUMBER(), ERROR_SEVERITY(), ERROR_STATE(), ERROR_PROCEDURE(), ERROR_LINE(), ERROR_MESSAGE())
END CATCH
私の例ではINSERT4は失敗します。他のインサートは正しくロールバックされているようですが、このエラーが発生します。
EXECUTEの後のトランザクション数は、BEGINとCOMMIT文の数が一致しないことを示します。前のカウント= 0、現在のカウント= 1
構文は正しいですか? @@ TRANCOUNT>の代わりにIF(XACT_STATE())= -1をテストする他の例を見てきました。
とあなたがストアドプロシージャでトランザクションを持っていますか? –
'ROLLBACK TRANSACTION'の直後に' INSERT INTO Errors'を入れてみてください – gofr1