【发布时间】:2021-01-22 07:27:30
【问题描述】:
我正在开发库存管理系统。我必须像这样的表格。
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 Table 戴尔笔记本电脑数量是 30。我卖一台笔记本电脑。不是我的tblProductStock table 戴尔笔记本电脑是 29。不是 30。现在我从tblPurchase table 退回 5 台戴尔笔记本电脑。现在我的购买数量应该是 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 25 和我的 tblProductStock 应该是 24。这就是我问这个问题的原因。有人可以重写此代码,请发给我。我尝试解决这个问题超过 100 次。还是没有解决这个问题。
【问题讨论】:
-
您的最后一个代码应该可以正常工作。对于退货,数量应该是负数。对于购买,正面的。
标签: sql sql-server-2017 sql-server-2014-express sql-server-2016-express