Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

ROLLBACK TRANSACTION-Anforderung hat keine entsprechende BEGIN TRANSACTION

Der Fehler, den Sie erhalten, liegt daran, dass Sie ein Rollback durchführen, ohne eine offene Transaktion zu haben (Sie haben entweder bereits festgeschrieben oder zurückgesetzt). Erwägen Sie, die Struktur Ihrer gespeicherten Prozedur zu bereinigen, versuchen Sie, Ihre gesamte gespeicherte Prozedur als eine Transaktion auszuführen, und machen Sie dann einen Rollback, wenn ein Fehler auftritt. Sie können auch testen, ob ein Rollback erforderlich ist, indem Sie prüfen, ob eine Transaktion offen ist:

BEGIN TRANSACTION;
BEGIN TRY

   --execute all your stored proc code here and then commit
   COMMIT;

END TRY
BEGIN CATCH

   --if an exception occurs execute your rollback, also test that you have had some successful transactions
   IF @@TRANCOUNT > 0 ROLLBACK;  

END CATCH