Pemicu penyisipan dipanggil sekali untuk penyisipan massal, tetapi pada pemicu Anda dapat menggunakan inserted
khusus tabel untuk mendapatkan semua baris yang disisipkan.
Jadi, bayangkan Anda memiliki pemicu penyisipan seperti ini, yang mencatat semua baris yang dimasukkan ke dalam table
create trigger trgInsertTable
on dbo.table
for insert
as
insert tableLog(name)
select name from inserted
Dengan pemicu ini, saat Anda membuat penyisipan massal di table
, tableLog
diisi dengan jumlah baris yang sama yang dimasukkan ke table
Untuk pemicu khusus Anda, karena Anda perlu memanggil prosedur tersimpan untuk setiap baris, Anda perlu menggunakan kursor:
ALTER TRIGGER dbo.Notify
ON dbo.Table
AFTER INSERT
AS
BEGIN
DECLARE @EmailSender varchar(50)='Sender Profile'
DECLARE @User varchar(20)
DECLARE @Subject varchar(50)
DECLARE cursor CURSOR FOR
SELECT User, '(' + CONVERT(varchar, Id) + ')!'
FROM inserted
OPEN cursor
FETCH NEXT FROM cursor INTO @User, @Subject
WHILE @@FETCH_STATUS = 0
BEGIN
exec msdb.dbo.sp_send_dbmail
@[email protected],
@[email protected]
@[email protected],
@body='//etc'
FETCH NEXT FROM cursor INTO @User, @Subject
END
CLOSE cursor
DEALLOCATE cursor
END
Saya tidak menguji, tetapi seharusnya berfungsi