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ší.