Indsæt-triggeren kaldes én gang for bulk-indlæg, men på triggeren kan du bruge den specielle inserted
tabel for at få alle de indsatte rækker.
Så forestil dig, at du har en insert-trigger som denne, der logger alle rækkerne indsat i table
create trigger trgInsertTable
on dbo.table
for insert
as
insert tableLog(name)
select name from inserted
Med denne trigger, når du laver en masseindsættelse på table
, tableLog
er fyldt med det samme antal rækker, som blev indsat i table
For din specifikke trigger, da du skal kalde en lagret procedure for hver række, skal du bruge en markør:
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
Jeg testede ikke, men burde virke