Trình kích hoạt chèn được gọi một lần cho các lần chèn hàng loạt, nhưng trên trình kích hoạt, bạn có thể sử dụng inserted
đặc biệt bảng để nhận tất cả các hàng đã chèn.
Vì vậy, hãy tưởng tượng bạn có một trình kích hoạt chèn như thế này, ghi nhật ký tất cả các hàng được chèn vào table
create trigger trgInsertTable
on dbo.table
for insert
as
insert tableLog(name)
select name from inserted
Với trình kích hoạt này, khi bạn thực hiện chèn hàng loạt trên bảng table
, tableLog
được lấp đầy với cùng một số hàng đã được chèn vào table
Đối với trình kích hoạt cụ thể của bạn, vì bạn cần gọi một thủ tục được lưu trữ cho mỗi hàng, bạn cần sử dụng con trỏ:
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
Tôi đã không thử nghiệm, nhưng sẽ hoạt động