Я немного новичок в триггерах в SQL Server (2008 R2) и столкнулся с небольшой проблемой. У меня есть следующая таблица (некоторые поля были опущены для краткости):
CREATE TABLE [dbo].[Task] (
[TK_ID] [int] IDENTITY(1,1) NOT NULL,
[TK_DateModified] [datetime] NULL,
[TK_ModifiedBy] [int] NULL,
[TK_DateCreated] [datetime] NULL,
[TK_CreatedBy] [int] NULL,
[TK_AssignedTo] [int] NULL)
Я добавил в таблицу 3 триггера:
Триггер 1 находится в процессе создания записи (вставки) и устанавливает дату создания и пользователя, который создал запись.
Триггер 2 находится при обновлении записи и устанавливает дату изменения и пользователя, который изменил запись.
Триггер 3 находится на вставке / обновлении записи и настроен на отправку электронного письма пользователю, указанному в поле TK_AssignedTo.
Когда я пытался вставить запись, он отправлял пользователю несколько электронных писем. Я заканчиваю тем, что получил электронное письмо о создании и 2 электронных письма обновления. Я хочу, чтобы вставка попала в триггер 1 и триггер 3 из вставки, но я думаю, что обновление «созданных» полей в триггере 1 вызывает триггер 3 во второй раз, а поскольку триггер 1 вызывает обновление полей, он запускает триггер 2 , который делает еще одно обновление и запускает триггер 3 снова. Я попытался отключить рекурсивные триггеры в базе данных, чтобы этого не произошло, но я не думаю, что это дает желаемый эффект, и я попытался внести изменение в триггер 3, чтобы предотвратить отправку электронных писем, когда поля «создан» и «изменен» уволена. Вот кадр кода для триггера 3 на данный момент.
ALTER TRIGGER [dbo].[trig_Task_SendEmail] ON [dbo].[Task] FOR INSERT,UPDATE AS
IF (NOT UPDATE(TK_DateCreated)) AND (NOT UPDATE(TK_CreatedBy)) AND (NOT UPDATE(TK_DateModified)) AND (NOT UPDATE(TK_ModifiedBy))
BEGIN
-- Coding to send email to user on changed tasks
END
В этой форме код для отправки электронного письма не запускается вообще, даже при вставке. Я думаю, что функция ОБНОВЛЕНИЕ (поле) не работает, как я надеялся, что будет. Есть ли способ отключить обновление этих 4 полей от запуска другого триггера обновления или какой-либо другой жизнеспособной опции, чтобы триггеры 1 и 3 срабатывали только при вставке, а триггеры 2 и 3 - при обновлении?