Mari kita mulai dengan saya tidak akan pernah dan maksud saya tidak pernah memanggil proc yang tersimpan di pemicu. Untuk memperhitungkan sisipan multi baris, Anda harus mengarahkan kursor melalui proc. Ini berarti 200.000 baris yang baru saja Anda muat melalui kueri berbasis set (katakanlah memperbarui semua harga sebesar 10%) mungkin mengunci tabel selama berjam-jam karena pemicu mencoba dengan gagah berani menangani beban. Plus jika ada sesuatu yang berubah dalam proc, Anda dapat mematahkan sisipan apa pun ke meja sama sekali atau bahkan menutup meja sepenuhnya. Saya sangat yakin bahwa kode pemicu tidak boleh memanggil apa pun selain pemicu.
Secara pribadi saya lebih memilih untuk hanya melakukan tugas saya. Jika saya telah menulis tindakan yang ingin saya lakukan dengan benar di pemicu, itu hanya akan memperbarui, menghapus, atau menyisipkan di mana kolom telah berubah.
Contoh:misalkan Anda ingin memperbarui bidang last_name yang Anda simpan di dua tempat karena denormalisasi yang ditempatkan di sana karena alasan kinerja.
update t
set lname = i.lname
from table2 t
join inserted i on t.fkfield = i.pkfield
where t.lname <>i.lname
Seperti yang Anda lihat, itu hanya akan memperbarui nama-nama yang berbeda dari apa yang saat ini ada di tabel yang saya perbarui.
Jika Anda ingin melakukan audit dan merekam hanya baris-baris yang berubah maka lakukan perbandingan menggunakan semua bidang seperti di mana i.field1 <> d.field1 atau i.field2 <> d.field3 (dll melalui semua bidang)