Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie man eine Transaktion in SQL Server zurücksetzt oder festschreibt

Die gute Nachricht ist, dass eine Transaktion in SQL Server mehrere Batches umfassen kann (jede exec wird als separater Stapel behandelt.)

Sie können Ihre EXEC umschließen Anweisungen in einer BEGIN TRANSACTION und COMMIT Sie müssen jedoch noch einen Schritt weiter gehen und einen Rollback durchführen, falls Fehler auftreten.

Idealerweise möchten Sie so etwas:

BEGIN TRY
    BEGIN TRANSACTION 
        exec( @sqlHeader)
        exec(@sqlTotals)
        exec(@sqlLine)
    COMMIT
END TRY
BEGIN CATCH

    IF @@TRANCOUNT > 0
        ROLLBACK
END CATCH

Die BEGIN TRANSACTION und COMMIT Ich glaube, Sie sind bereits vertraut mit. Der BEGIN TRY und BEGIN CATCH Blöcke sind im Grunde dazu da, auftretende Fehler abzufangen und zu behandeln. Wenn einer Ihrer EXEC -Anweisungen einen Fehler auslösen, springt die Codeausführung zum CATCH Block.

Ihr vorhandener SQL-Building-Code sollte sich außerhalb der Transaktion (oben) befinden, da Sie Ihre Transaktionen immer so kurz wie möglich halten möchten.