Как использовать триггер обновления для обновления другой таблицы?
Я новичок в триггерах и хочу создать триггер для обновления столбца и обновить другую таблицу с этим значением.
У меня есть таблица1 с столбцом года, и если приложение обновляет столбец в этом году, мне нужно обновить таблицу 2 с годом того же года.
ALTER TRIGGER [dbo].[trig_UpdateAnnualYear]
ON [dbo].[table1]
AFTER UPDATE
AS
if (UPDATE (intAnnualYear))
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for trigger here
Update table2 set AnnualYear = intAnnualYear where table2.ID = table1.ID
END
Ответы
Ответ 1
Вы не ссылаетесь на table1
внутри триггера. Используйте псевдо-таблицу inserted
, чтобы получить значения "после". Также помните, что обновление может влиять на несколько строк.
Итак, замените текущую инструкцию update
на
UPDATE table2
SET table2.annualyear = inserted.intannualyear
FROM table2
JOIN inserted
ON table2.id = inserted.id
Ответ 2
Вам нужно только обновить записи в таблице2, если задействован столбец intannualyear. Кроме того, это альтернативный синтаксис UPDATE для двух таблиц из того, что показал Мартин
IF UPDATE(intannualyear)
UPDATE table2
SET annualyear = inserted.intannualyear
FROM inserted
WHERE table2.id = inserted.id
Ответ 3
В соответствии с этот вопрос, если есть только одна таблица "вниз по течению", то другой вариант с правильно определенным отношением внешнего ключа будет каскадным обновлением.
Ответ 4
Чтобы дополнить приведенные выше ответы, если вам нужно проверить более одного столбца, вы можете использовать INNER JOIN между вставленным и удаленным или несколько вызовов UPDATE():
IF ( UPDATE(Col1) OR UPDATE(Col2) ) BEGIN ...