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.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage