用于插入更新的 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 插入触发器的主要内容,如果未能解决你的问题,请参考以下文章

SQL AFTER 插入更新触发器

sql插入的操作

如果插入的值与唯一约束冲突,则 SQL 触发器在插入时更新字段

SQL Server 触发器切换插入、删除、更新

SQL Server 触发器插入/更新特定列

如何在 SQL Server 2008 上创建插入更新触发器