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.