触发SQL Server插入记录并更新另一个表中的字段

时间:2018-03-14 15:01:20

标签: sql-server sql-server-2012

我有两张桌子:
tblProducts
-Id int,
-nameProduct varchar(10),
-Quantity int

tblSales
-id
-Idproduct
-Quantity int

Products表与'Sales'表相关。我想要做的是,当添加产品销售时,更新“产品”表的字段“数量”。换句话说,一旦销售完成,减少“产品”表中的产品数量。

我试图通过以下方式实现:

CREATE TRIGGER update_quantity
on Sales
AFTER INSERT
AS
BEGIN
UPDATE Products set Quantity=Quantity - inserted.Quantity WHERE 
Sales.id= inserted.id;
END
GO

1 个答案:

答案 0 :(得分:0)

男孩谈论细节稀疏。我猜你正在尝试做这样的事情。我建议你不要使用" id"作为列名。当列名从表更改为表时,这很糟糕。如果某些东西是ProductID,它始终是ProductID,而不仅仅是ID。不确定为什么你的销量和产品都有数量。也许那意味着Product表中的QuantityOnHand?

update p
set Quantity = Quantity - i.Quantity
from Products p
join inserted i on i.id = p.productid

- 编辑 -

这是一种确保同一产品ID的多行操作安全的方法。

update p
set Quantity = Quantity - x.NewQuantity
from Products p
cross apply 
(
    select NewQuantity = sum(i.Quantity) 
    from inserted i 
    where i.id = p.productid
) x