Dobrou zprávou je, že transakce na serveru SQL Server může zahrnovat více dávek (každá exec je považováno za samostatnou dávku.)
Svůj EXEC můžete zabalit příkazy v BEGIN TRANSACTION a COMMIT ale budete muset jít o krok dále a vrátit zpět, pokud se vyskytnou nějaké chyby.
V ideálním případě byste chtěli něco takového:
BEGIN TRY
BEGIN TRANSACTION
exec( @sqlHeader)
exec(@sqlTotals)
exec(@sqlLine)
COMMIT
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK
END CATCH
BEGIN TRANSACTION a COMMIT Věřím, že jste již obeznámeni. BEGIN TRY a BEGIN CATCH bloky jsou v podstatě tam, aby zachytily a zvládly všechny chyby, které se vyskytnou. Pokud některý z vašich EXEC příkazy vyvolávají chybu, spuštění kódu přeskočí na CATCH blok.
Váš stávající stavební kód SQL by měl být mimo transakci (výše), protože vždy chcete, aby vaše transakce byly co nejkratší.