问题描述
我正在开发库存管理系统。我必须像这样摆桌子。
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 is 25 or PurchaseId
3 is to 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。现在我从 tblPurchase
表返回 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 次。还是没有解决这个问题。
解决方法
您可以使用类似的方法来更新您的 Stock 表。
CREATE TABLE #TempPurchase
( ID INT IDENTITY (1,1),ItemCode VARCHAR (10),Quantity INT );
CREATE TABLE #TempSold
( ID INT IDENTITY (1,Quantity INT );
CREATE TABLE #TempStock
( ID INT IDENTITY (1,Quantity INT );
INSERT INTO #TempPurchase ( ItemCode,Quantity )
VALUES ( 'IMT0003',25 ),( 'IMT0004',2 ),( 'IMT0003',5 );
INSERT #TempSold ( ItemCode,2 );
INSERT INTO #TempStock ( ItemCode,30 ),2 );
CREATE TABLE #FinalData
( ID INT IDENTITY (1,Quantity INT );
INSERT #FinalData ( ItemCode,Quantity )
SELECT ts.ItemCode,ISNULL (( SUM (tp.Quantity) - ts2.Quantity ),ts.Quantity) AS quantity
FROM #TempStock AS ts
LEFT JOIN #TempPurchase AS tp ON tp.ItemCode = ts.ItemCode
LEFT JOIN #TempSold AS ts2 ON ts2.ItemCode = ts.ItemCode
GROUP BY ts.ItemCode,ts2.Quantity,ts.Quantity;
UPDATE ts
SET ts.Quantity = fd.Quantity
FROM #FinalData AS fd
INNER JOIN #TempStock AS ts ON ts.ItemCode = fd.ItemCode;
DROP TABLE #TempStock
DROP TABLE #TempPurchase
DROP TABLE #TempSold
DROP TABLE #FinalData