Pojawia się błąd, ponieważ wycofujesz się bez otwartej transakcji (masz już już zatwierdzone lub wycofane). Rozważ wyczyszczenie struktury przechowywanej procedury, spróbuj wykonać całą przechowywaną procedurę jako jedną transakcję, a następnie wycofaj, jeśli wystąpi błąd. Możesz również sprawdzić, czy wymagane jest wycofanie, sprawdzając, czy transakcja jest otwarta:
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