SQL триггер вставки для вставки с обновлением - PullRequest
0 голосов
/ 19 июня 2020

У меня две таблицы:

[1] Пожертвования - с полем суммы и pet_id

[2] Питомцы - с полем id и общим количеством пожертвований

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

create trigger update_donations
on sponserships
for insert
as
   update dbo.Pets 
   set tot_donations = (
      select new_val = inserted.amount + pets.tot_donations
      from inserted
      where inserted.[Pet-ID] = pets.[Animal-ID]
   )

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

1 Ответ

2 голосов
/ 19 июня 2020

Обычно не рекомендуется хранить производную информацию этого типа - у вас может быть представление, которое вычисляет ее на лету, а не триггер, который поддерживает ее в актуальном состоянии. Также обратите внимание, что если вы go таким образом, вам также понадобится delete и update триггер ...

Тем не менее, вы можете использовать следующий запрос в своем insert триггере, чтобы обновить соответствующую запись в таблице питомцев:

update p
set p.total_donations = p.total_donations + i.amount    
from dbo.Pets p
inner join inserted i on i.[Pet-ID] = p.[Animal-ID]
...