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.