Ich habe eine SQL Server gespeicherte Prozedur, die mir den sehr häufig FehlerWarum gibt mir mein SP keine sinnvolle Fehlermeldung?
"db_ErrorCode Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. Previous count = 1, current count = 0."
Was nachdem ich habe festgestellt, kehrt das Googeln ist, dass seine wirklich sagen, dass es ein Fehler passiert, bevor die Transaktion festgeschrieben wird.
Es gibt ein
BEGIN TRY
BEGIN TRANSACTION
Zu Beginn des SP und
COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
SELECT @ErrorNumber = ERROR_NUMBER(),
@ErrorLine = ERROR_LINE(),
@ErrorMessage = ERROR_MESSAGE()
RAISERROR (@Flag, 18, 120);
END CATCH
END
Das Problem ist, dass zwischen diesen Linien in etwa 1100 Zeilen Code gibt es, und wenn es ein Problem gibt, Der gesamte SP muss zurückgesetzt werden, so dass wir keine try/catch-Anweisungen dazwischen setzen können. Und warum gibt mein abschließender Catch-Block den tatsächlichen Fehler nicht zurück, anstatt mir den nicht hilfreichen Transaktionszählungsfehler zu geben?
Versuchen Sie, 'set XACT_ABORT ON 'an die Spitze der SP hinzuzufügen. Dadurch wird der Transaktionszählungsfehler beseitigt und Sie sollten den tatsächlichen Fehler sehen können. –
An der Spitze vor dem BEGINN TRY und BEGIN TRANSACTION, mit den Globals? –
Ja, mit den Globalen. –