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