Het goede nieuws is dat een transactie in SQL Server meerdere batches kan omvatten (elke exec
wordt behandeld als een afzonderlijke batch.)
U kunt uw EXEC
. inpakken verklaringen in een BEGIN TRANSACTION
en COMMIT
maar je moet een stap verder gaan en terugdraaien als er fouten optreden.
Idealiter zou je zoiets als dit willen:
BEGIN TRY
BEGIN TRANSACTION
exec( @sqlHeader)
exec(@sqlTotals)
exec(@sqlLine)
COMMIT
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK
END CATCH
De BEGIN TRANSACTION
en COMMIT
Ik geloof dat je al bekend bent met. De BEGIN TRY
en BEGIN CATCH
blokken zijn er in principe om eventuele fouten op te vangen en af te handelen. Als een van uw EXEC
instructies geven een fout, de uitvoering van de code springt naar de CATCH
blok.
Uw bestaande SQL-bouwcode moet buiten de transactie (hierboven) staan, omdat u uw transacties altijd zo kort mogelijk wilt houden.