Der Insert-Trigger wird einmal für Masseneinfügungen aufgerufen, aber auf dem Trigger können Sie den speziellen inserted
verwenden Tabelle, um alle eingefügten Zeilen zu erhalten.
Stellen Sie sich also vor, Sie haben einen Insert-Trigger wie diesen, der alle in table
eingefügten Zeilen protokolliert
create trigger trgInsertTable
on dbo.table
for insert
as
insert tableLog(name)
select name from inserted
Mit diesem Trigger, wenn Sie eine Masseneinfügung in table
vornehmen , das tableLog
wird mit der gleichen Anzahl von Zeilen gefüllt, die in table
eingefügt wurden
Da Sie für jede Zeile eine gespeicherte Prozedur aufrufen müssen, müssen Sie für Ihren spezifischen Trigger einen Cursor verwenden:
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
Ich habe es nicht getestet, sollte aber funktionieren