Wir haben DML-Operationen in jedem Schritt eines SQL Server-Jobs. Um sicherzustellen, dass das Update / Insert zurückgesetzt wird, falls etwas schief geht, habe ich die Datenänderungen für jeden Schritt in TRY CATCH
und TRANSACTION
Blöcke eingeschlossen:
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
Stellt es sicher, dass die Datenmanipulationen im Falle von Fehlern zurückgesetzt werden? Oder sollten andere Überlegungen berücksichtigt werden?
Wäre dies besser (mithilfe von Konfigurationen usw.)?
Danke.