El disparador de inserción se llama una vez para inserciones masivas, pero en el disparador puede usar el inserted
especial tabla para obtener todas las filas insertadas.
Entonces, imagine que tiene un disparador de inserción como este, que registra todas las filas insertadas en table
create trigger trgInsertTable
on dbo.table
for insert
as
insert tableLog(name)
select name from inserted
Con este activador, cuando realiza una inserción masiva en table
, el tableLog
se llena con el mismo número de filas que se insertaron en table
Para su disparador específico, dado que necesita llamar a un procedimiento almacenado para cada fila, necesita usar un cursor:
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
No probé, pero debería funcionar