TSQL Try / Catch innerhalb einer Transaktion oder umgekehrt?
Ich schreibe ein Skript, das Datensätze aus einer Reihe von Tabellen löscht, aber bevor es gelöscht wird, muss es eine Anzahl zurückgeben, die ein Benutzer vor dem Festschreiben bestätigen muss.
Dies ist eine Zusammenfassung des Skripts.
BEGIN TRANSACTION SCHEDULEDELETE
BEGIN TRY
DELETE -- delete commands full SQL cut out
DELETE -- delete commands full SQL cut out
DELETE -- delete commands full SQL cut out
PRINT 'X rows deleted. Please commit or rollback.' --calculation cut out.
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
ROLLBACK TRANSACTION SCHEDULEDELETE
PRINT 'Error detected, all changes reversed.'
END CATCH
--COMMIT TRANSACTION SCHEDULEDELETE --Run this if count correct.
--ROLLBACK TRANSACTION SCHEDULEDELETE --Run this if there is any doubt whatsoever.
Dies ist das erste Mal, dass ich eine Transaktion schreibe. Ist es richtig / empfehlenswert, den TRY / CATCH-Block in der Transaktion zu haben, oder sollte sich die Transaktion im TRY-Block befinden?
Der wichtige Faktor in diesem Skript ist, dass der Benutzer die Transaktion manuell festschreiben muss.