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.