Spouštěč vkládání se u hromadných vkládání volá jednou, ale na spouštěči můžete použít speciální inserted
tabulky, abyste získali všechny vložené řádky.
Představte si tedy, že máte spouštěč vložení, jako je tento, který zaznamenává všechny řádky vložené do table
create trigger trgInsertTable
on dbo.table
for insert
as
insert tableLog(name)
select name from inserted
S tímto spouštěčem, když provedete hromadné vložení na table
, tableLog
je vyplněno stejným počtem řádků, jaké byly vloženy do table
Pro váš konkrétní trigger, protože potřebujete volat uloženou proceduru pro každý řádek, musíte použít kurzor:
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
Netestoval jsem, ale měl by fungovat