Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

La richiesta ROLLBACK TRANSACTION non ha una BEGIN TRANSACTION corrispondente

L'errore che ricevi è perché stai effettuando il rollback senza avere una transazione aperta (hai già già commesso o annullato). Prendi in considerazione la possibilità di ripulire la struttura del processo archiviato, provare a eseguire l'intero processo archiviato come una transazione e quindi eseguire il rollback se si verifica un errore. Puoi anche verificare se è necessario un rollback controllando se una transazione è aperta:

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