Как я могу заставить триггер срабатывать для каждой вставленной строки во время INSERT INTO Table (и т. Д.) SELECT * FROM Table2?

Я пытался избежать использования курсора в этом конкретный случай только потому, что мне не нравятся компромиссы, и так уж получилось, что процесс, который я использую, в любом случае заставляет триггеры выглядеть правильным курсом действий.

Хранимая процедура вставляет запись, основанную на сложном сочетании предложений, используя триггер вставки Я отправляю целевому пользователю электронное письмо с предложением посетить сайт. Это просто и прекрасно работает.

Однако другая процедура - запускать каждую ночь и перераспределять все непросмотренные записи. То, как я это делал, заключалось в том, чтобы сделать еще одну вставку на основе выбора в поле даты, когда оно было назначено. То есть:

INSERT INTO Table (ID, User, AssignDate, LastActionDate)
    SELECT 
        ID
        ,User
        ,GETDATE() [AssignDate]
        ,GETDATE() [LastModifiedDate]
    FROM Table2
        /*snip*/

Триггер работает с отдельными вставками, но оператор select выше работает только с последней вставленной строкой. Есть ли способ обойти такое поведение? Это все разрушает!

Правка (код триггера):

ALTER TRIGGER dbo.Notify
    ON  dbo.Table
    AFTER INSERT
AS 
BEGIN

    DECLARE @EmailSender varchar(50)='Sender Profile'
    DECLARE @Identity int
    DECLARE @User varchar(20)
    DECLARE @Subject varchar(50)

    SET @Identity=@@Identity

    SELECT @User=User, @Subject='(' + CONVERT(varchar,@Identity) + ')!'
    FROM Table
    WHERE
        idNum=@Identity

    exec msdb.dbo.sp_send_dbmail
        @profile_name=@EmailSender,
        @recipients=@User
        @subject=@Subject,
        @body='//etc'

END
5
задан C Bauer 27 April 2011 в 15:01
поделиться