Тригерът за вмъкване се извиква веднъж за групови вмъквания, но на тригера можете да използвате специалния inserted
таблица, за да получите всички вмъкнати редове.
И така, представете си, че имате тригер за вмъкване като този, който регистрира всички редове, вмъкнати в table
create trigger trgInsertTable
on dbo.table
for insert
as
insert tableLog(name)
select name from inserted
С този тригер, когато правите групово вмъкване в table
, tableLog
се запълва със същия брой редове, които са били вмъкнати в table
За вашия конкретен тригер, тъй като трябва да извикате съхранена процедура за всеки ред, трябва да използвате курсор:
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
Не съм тествал, но трябва да работи