Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

La requête ROLLBACK TRANSACTION n'a pas de BEGIN TRANSACTION correspondante

L'erreur que vous obtenez est due au fait que vous annulez sans avoir de transaction ouverte (vous avez soit déjà commis ou annulé). Envisagez de nettoyer la structure de votre proc stocké, essayez d'exécuter l'intégralité de votre proc stocké en une seule transaction, puis de revenir en arrière si une erreur se produit. Vous pouvez également tester si une annulation est nécessaire en vérifiant si une transaction est ouverte :

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