Nous avons des opérations DML à chaque étape d'un travail SQL Server. Pour assurer la mise à jour quelque chose / insertion sera annulée en cas de problème, je l' ai enveloppé les modifications de données de chaque étape dans TRY CATCH
et TRANSACTION
blocs:
BEGIN TRY
BEGIN TRANSACTION
[[INSERT/update statements]] ...
IF @@TRANCOUNT > 0
BEGIN
COMMIT TRANSACTION
PRINT 'Successful.'
END
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() AS ErrorState,
ERROR_PROCEDURE() AS ErrorProcedure,
ERROR_LINE() AS ErrorLine,
ERROR_MESSAGE() AS ErrorMessage
IF @@TRANCOUNT > 0
BEGIN
ROLLBACK TRANSACTION
PRINT 'Unsuccessful.'
END
END CATCH
Cela garantit-il que les manipulations de données seront annulées en cas d'erreur (s)? Ou d'autres considérations devraient-elles être prises en compte?
Serait-il une meilleure façon de le faire (en utilisant des configurations, etc.)?
Je vous remercie.