我正在开发库存管理系统。我必须像这样的桌子。
tblPurchase
桌子
PurchaseId | ItemCode | ItemName | Quantity |
-----------------------------------------------------
1 | IMT0003 | Dell Laptop | 30 |
-----------------------------------------------------
2 | IMT0004 | Samsung Phone | 2 |
-----------------------------------------------------
3 | IMT0003 | Dell Laptop | 5 |
-----------------------------------------------------
tblProductStock
桌子
ItemCode | ItemName | Quantity |
--------------------------------------
IMT0003 | Dell Laptop | 35 |
--------------------------------------
IMT0004 | Samsung Phone | 2 |
--------------------------------------
现在我想做这样的事情。现在tblPurchase
表戴尔笔记本电脑数量是 35。tblProductStock
也一样。现在我退回 5 台戴尔笔记本电脑。现在我想更新我的tblPurchase
表PurchaseId
1 是 25 或PurchaseId
3 是 0。因为我返回了 5 项。我不在乎哪个purchaseid
。如果我从 30 中扣除,它应该是 25。或者如果我扣除表格purchaseId
3 。它应该是0。
而且我的tblProductStock
表也应该根据tblPurchase
表数量进行更改。这意味着现在我的tblProductStock
戴尔笔记本电脑表必须是 30。为了实现这个目标,我们可以使用这样的更新查询。
ALTER TRIGGER [dbo].[update_productstock_table_when_updating_purchasequantity]
ON [dbo].[tblPurchase]
AFTER UPDATE
AS
BEGIN
UPDATE ps
SET Quantity = ps.Quantity
FROM tblProductStock ps JOIN
(SELECT i.ItemCode, SUM(quantity) as quantity
FROM tblPurchase i
GROUP BY i.itemCode
) i
ON ps.ItemCode = i.ItemCode;
END
但我的问题不是这个。这是预期的工作。想象一下我的tblPurchase
台式戴尔笔记本电脑数量是 30。我卖一台笔记本电脑。不是我的tblProductStock
戴尔笔记本电脑是 29 台。不是 30 台。现在我从表中退回 5 台戴尔笔记本电脑tblPurchase
。现在我的购买数量应该是 25。我的tblProductStock
桌子必须是 24。因为我卖了一件。为了实现这个目标,我可以使用以下更新语句。
UPDATE ps
SET Quantity = i.quantity - ps.Quantity
FROM tblProductStock ps JOIN
(SELECT i.ItemCode, SUM(quantity) as quantity
FROM tblPurchase i
GROUP BY i.itemCode
) i
ON ps.ItemCode = i.ItemCode;
但是我怎样才能将这两个更新查询与触发器一起使用。如果我使用两者都是相同的触发器,它会得到错误的值。因为两个表中的数量相同。我想更新tblProductStock
表。但我的tblProductStock
餐桌数量是 29 并且购买量是 30 。在我返回 5 之后,现在我的tblPurchase
25tblProductStock
应该是 24。这就是我问这个问题的原因。有人可以重写此代码,请发给我。我尝试解决这个问题超过 100 次。仍然没有解决这个问题。