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.