用于插入更新的 SQL 插入触发器
Posted
技术标签:
【中文标题】用于插入更新的 SQL 插入触发器【英文标题】:SQL insert trigger for insert with update 【发布时间】:2020-06-19 14:17:06 【问题描述】:我有两张桌子:
[1] 捐款 - 带有金额和 pet_id 字段
[2] 宠物 - 带有 id 和总捐款字段
我正在尝试创建一个触发器,该触发器将在任何时候更新总捐款字段 正在向 Donations 表插入一个新行。我试过这个:
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]
)
但当然它会更改所有记录,而我只想更改捐赠表中更改的记录。
【问题讨论】:
您是否假设只插入了一个(并且只有一个 - 不是 10 或 1000 或 0)行?并且给定名称“tot_donations”,表之间是否存在 1:M 关系,需要求和才能计算总数? 【参考方案1】:存储这种类型的派生信息通常不是一个好习惯 - 您可以使用动态计算它的视图,而不是让它保持最新的触发器。另请注意,如果您这样做,您还需要一个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]
【讨论】:
以上是关于用于插入更新的 SQL 插入触发器的主要内容,如果未能解决你的问题,请参考以下文章