Intereting Posts
понимание MySQL Объяснение вывода Сервер MySQL ушел Создание n строк на группу Должна ли эта функция PostgreSQL возвращать нулевые строки? Как я могу сделать запрос возвращать ничего, когда нет никаких условий? Как печатать десятичный номер из сохраненной строковой даты (PL / SQL) нахождение последней последовательной строки Как преобразовать строку базы данных в структуру в Go? система бронирования гостиниц SQL-запрос: укажите, когда доступна одна конкретная комната Уменьшение количества запросов для внутреннего соединения при присоединении базы к одной таблице отображать подкатегории с использованием SQL SqlException не был обработан ошибкой кода пользователя, но информация все еще хранится в базе данных фильтрация сводной таблицы Excel для отображения последних 24-часовых данных Как получить WPF DataGrid для сохранения изменений Вернуться к базе данных? показать нуль, если группа не возвращает значение

Как использовать триггер обновления для обновления другой таблицы?

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

У меня есть таблица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 

Вы не ссылаетесь на table1 внутри триггера. Используйте inserted псевдо-таблицу, чтобы получить значения «после». Также помните, что обновление может влиять на несколько строк.

Поэтому замените текущую инструкцию update

 UPDATE table2 SET table2.annualyear = inserted.intannualyear FROM table2 JOIN inserted ON table2.id = inserted.id 

Вам нужно только обновить записи в таблице2, если задействован столбец intannualyear. Кроме того, это альтернативный синтаксис UPDATE для двух таблиц, что показал Мартин

 IF UPDATE(intannualyear) UPDATE table2 SET annualyear = inserted.intannualyear FROM inserted WHERE table2.id = inserted.id 

Согласно этому вопросу , если есть только одна «нисходящая» таблица, то другой вариант с правильно определенным отношением внешнего ключа будет каскадным обновлением.

В дополнение к приведенным выше ответам, если вам нужно проверить более одного столбца, вы можете использовать INNER JOIN между вставленным и удаленным или несколько вызовов UPDATE ():

 IF ( UPDATE(Col1) OR UPDATE(Col2) ) BEGIN ...