sql >> Database >  >> RDS >> Sqlserver

Hoe kan ik een trigger krijgen om op elke ingevoegde rij te vuren tijdens een INSERT INTO Table (enz.) SELECT * FROM Table2?

De insert-trigger wordt één keer aangeroepen voor bulk-inserts, maar op de trigger kun je de speciale inserted gebruiken tabel om alle ingevoegde rijen te krijgen.

Dus stel je voor dat je een invoegtrigger hebt zoals deze, die alle rijen logt die zijn ingevoegd in table

create trigger trgInsertTable 
on dbo.table
for insert
as
   insert tableLog(name)
    select name from inserted

Met deze trigger, wanneer u een bulkinvoeging maakt op table , de tableLog is gevuld met hetzelfde aantal rijen die zijn ingevoegd in table

Voor uw specifieke trigger, aangezien u voor elke rij een opgeslagen procedure moet aanroepen, moet u een cursor gebruiken:

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

Ik heb niet getest, maar zou moeten werken



  1. Maak een MySQL-gebruiker en database vanuit PHP

  2. Django admin MySQL traag INNERLIJKE JOIN

  3. For-lus met dynamische tabelnaam in Postgresql 9.1?

  4. roep een eenvoudige databaseprocedure op met Slick 3.0