Den gode nyhed er, at en transaktion i SQL Server kan spænde over flere batches (hver exec). behandles som en separat batch.)
Du kan pakke din EXEC udsagn i en BEGIN TRANSACTION og COMMIT men du bliver nødt til at gå et skridt videre og rulle tilbage, hvis der opstår fejl.
Ideelt set vil du gerne have noget som dette:
BEGIN TRY
BEGIN TRANSACTION
exec( @sqlHeader)
exec(@sqlTotals)
exec(@sqlLine)
COMMIT
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK
END CATCH
BEGIN TRANSACTION og COMMIT Jeg tror, du allerede er bekendt med. BEGIN TRY og BEGIN CATCH blokke er grundlæggende til for at fange og håndtere eventuelle fejl, der opstår. Hvis nogen af dine EXEC sætninger rejser en fejl, vil kodeudførelsen hoppe til CATCH blok.
Din eksisterende SQL-bygningskode bør være uden for transaktionen (ovenfor), da du altid ønsker at holde dine transaktioner så korte som muligt.