Tin tốt là một giao dịch trong SQL Server có thể kéo dài nhiều đợt (mỗi exec được coi như một lô riêng biệt.)
Bạn có thể bọc EXEC của mình câu lệnh trong BEGIN TRANSACTION và COMMIT nhưng bạn sẽ cần phải tiến thêm một bước và quay lại nếu có bất kỳ lỗi nào xảy ra.
Lý tưởng nhất là bạn muốn một cái gì đó như thế này:
BEGIN TRY
BEGIN TRANSACTION
exec( @sqlHeader)
exec(@sqlTotals)
exec(@sqlLine)
COMMIT
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK
END CATCH
BEGIN TRANSACTION và COMMIT Tôi tin rằng bạn đã quen thuộc với. BEGIN TRY và BEGIN CATCH về cơ bản có các khối để bắt và xử lý bất kỳ lỗi nào xảy ra. Nếu bất kỳ EXEC nào của bạn câu lệnh phát sinh lỗi, quá trình thực thi mã sẽ chuyển đến CATCH khối.
Mã xây dựng SQL hiện tại của bạn phải nằm ngoài giao dịch (ở trên) vì bạn luôn muốn giữ cho các giao dịch của mình càng ngắn càng tốt.