Pemicu dalam kombinasi dengan transaksi

25

Misalkan kita memiliki situasi berikut:

Kami punya meja (katakanlah Table_A), yang memiliki pemicu INSERT. Pekerjaan pemicu adalah memperbarui beberapa baris table_Bberdasarkan pada nilai yang dimasukkan di table_A.

Sekarang, semuanya baik-baik saja ketika kita menyisipkan baris dalam tabel, tetapi bagaimana dengan situasi di mana kita memasukkan data melalui transaksi ?. Apakah pemicunya akan menunggu sampai semua laporan transaksi berjalan dengan sukses, atau akan dipecat saat ia mengakui penyisipan ?. Jika pelatuk langsung menyala ketika mengenali sisipan pertama, apa yang akan terjadi jika transaksi gagal di baris terakhir ?. Apakah ada mekanisme untuk situasi itu?

veljasije
sumber

Jawaban:

37

Sisipan selalu dalam transaksi.

Jika Anda tidak memiliki pernyataan eksplisit BEGIN TRAN ... COMMITatau SET IMPLICIT_TRANSACTIONS ONkemudian berjalan sebagai transaksi komit otomatis mandiri .

Pemicu selalu menjadi bagian dari transaksi untuk tindakan yang memicu pemicu. Jika kesalahan terjadi pada pemicu yang menyebabkan rollback transaksi maka tindakan menembak akan dibatalkan juga.

Pemicu secara implisit memiliki XACT_ABORT. Kesalahan dengan pengaturan ini aktif secara otomatis akan menyebabkan rollback transaksi (kecuali untuk kesalahan yang muncul dalam kode dengan RAISERRORpernyataan).

Martin Smith
sumber