Я пытался избегать использования курсора в этом конкретном случае только потому, что мне не нравятся компромиссы, и именно так происходит, процесс, который я использую, делает триггеры в любом случае похожими на правильный курс действий.
Хранимая процедура вставляет запись, основанную на сложном сочетании предложений, используя триггер вставки, я отправляю электронное письмо целевому пользователю, в котором ему предлагается посетить сайт.Это просто и отлично работает.
Однако другая процедура - запускать каждую ночь и распространять все не просмотренные записи.Я делал это, вставляя еще одну вставку на основе поля выбора даты, с которого оно было назначено.То есть:
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