我想在下面的触发器中使用两个更新语句。但是我的问题是我有库存管理系统。在我的SQL Server 2014中,我有两个表,如tblPurchase
和tblProductStock
。当我开具发票时,我tblProductStock
会自动更新。
例如:我的tblPurchase
桌子上有20台戴尔笔记本电脑。如果我卖5台戴尔笔记本电脑。现在我tblProductStock
是15岁。没关系。但是,当我更新tblPurchase
表格时,我想从中扣除购买金额ProductStock
。
例如:现在我的tblProductStock
桌子上有15台戴尔笔记本电脑。我已经购买了20台戴尔笔记本电脑。但是现在我想将我的tblPurchase
表更新为10。这意味着我不需要20台戴尔笔记本电脑。在那里,我退回了10件物品。现在我的tblProductStock
桌子Quantity
应该是5。因为我已经卖了5台戴尔笔记本电脑。
另一个问题是,如果我的tblPurchase
桌子和tblProductStock
桌子数量是这样的:TblPurchase
戴尔笔记本电脑数量是20,而戴尔笔记本电脑数量tblProductStock
是20。
此时,我从tblPurchase
表格中退回10个我不想扣除的项目tblProductStock
。现在我只想更新tblProductStock
到10
如何同时使用这两个更新查询?这是我的两个表,我添加了相同的数据。
tblPurchase
:
PurchaseId | ItemCode | ItemName | Quantity |
---------------------------------------------------
1 | ITM003 | Dell Laptop | 5 |
2 | ITM002 | Samsung Phone | 2 |
3 | ITM003 | Dell Laptop | 5 |
tblProductStock
:
ItemCode | ItemName | Quantity |
-------------------------------------
ITM003 | Dell Laptop | 10 |
ITM002 | Samsung Phone | 2 |
我使用此触发器来解决此问题。但是两个Update语句都可以工作,但不能同时工作。如果一条更新语句删除。另一个工作良好。。能否请您向我发送正确的查询,以更新我的购买和库存表。触发器或存储过程都可以。如果您发送存储过程,请也向我发送C#代码。
我使用了此触发器(我突出显示了IF AND ELSE语句。但是我不知道如何使用它。我只突出显示了它)
ALTER TRIGGER [dbo].[trig_update_productStock_when_change_the_tblProductColumn]
ON [dbo].[tblPurchase]
AFTER UPDATE
AS
IF EXISTS (SELECT p.ItemCode, ps.ItemCode, SUM(p.Quantity)PurchaseQuantity, MAX(ps.Quantity)ProductStockQuantity FROM tblPurchase p, tblProductStock ps
Where p.Quantity != ps.Quantity GROUP BY p.itemCode, ps.ItemCode)
BEGIN
SELECT MAX(ItemName) ItemName,
ItemCode,
SUM(Quantity) Quantity
FROM tblPurchase
GROUP BY itemCode;
UPDATE ps
SET Quantity = i.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
ELSE
BEGIN
SELECT MAX(ItemName) ItemName,
ItemCode,
SUM(Quantity) Quantity
FROM tblPurchase
GROUP BY itemCode;
UPDATE ps
SET Quantity = ps.Quantity - i.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
请帮我解决这个问题。我正在使用SQL Server 2014
根据注释中的讨论,您需要涵盖以下情况(使用trigger或sp):
可能的设计:
我会将它们全部放在单独的触发器中,因此所有都只有一个更新。
由于这个问题下的讨论已经很长时间了,我认为您应该考虑基于此问题进行实施,并在遇到困难时提出新的问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句