更新采购表后,我想自动更新我的库存表

问题描述

我正在开发库存管理系统。我必须像这样摆桌子。

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 台戴尔笔记本电脑。现在我想更新我的 tblPurchasePurchaseId 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