Kabar baiknya adalah transaksi di SQL Server dapat menjangkau beberapa batch (masing-masing exec diperlakukan sebagai kelompok terpisah.)
Anda dapat membungkus EXEC pernyataan dalam BEGIN TRANSACTION dan COMMIT tetapi Anda harus melangkah lebih jauh dan mundur jika terjadi kesalahan.
Idealnya Anda menginginkan sesuatu seperti ini:
BEGIN TRY
BEGIN TRANSACTION
exec( @sqlHeader)
exec(@sqlTotals)
exec(@sqlLine)
COMMIT
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK
END CATCH
BEGIN TRANSACTION dan COMMIT Saya yakin Anda sudah akrab dengannya. BEGIN TRY dan BEGIN CATCH blok pada dasarnya ada untuk menangkap dan menangani kesalahan yang terjadi. Jika salah satu dari EXEC . Anda pernyataan menimbulkan kesalahan, eksekusi kode akan melompat ke CATCH memblokir.
Kode bangunan SQL Anda yang ada harus berada di luar transaksi (di atas) karena Anda selalu ingin membuat transaksi Anda sesingkat mungkin.