挿入トリガーは一括挿入のために一度呼び出されますが、トリガーでは特別な 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
プレ>テストはしていませんが、動作するはずです