sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan kan jeg få en trigger til at udløse på hver indsat række under en INSERT INTO Table (osv.) VÆLG * FRA Tabel2?

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



  1. Hvordan installerer man KUN MySQL på Debian GNU/Linux 9 (stræk) uden MariaDB?

  2. MySQL-indekser - hvad er den bedste praksis?

  3. bestille efter .... tal? Hjælp mig med at sortere ip-adresser

  4. postgresql trigger:deaktiver automatisk commit og indstil isolationsniveau