我正在创建一个网上商店,我希望使用存储过程来降低销售时的产品库存。
如果有重复的产品,我当前的存储过程不起作用。所以我想在我的存储过程中使用foreach。但我对此并不熟悉。也许你可以帮助我?
我的存储过程:
CREATE PROCEDURE [dbo].[UpdateStock]
(@OrderID INT)
AS
BEGIN
UPDATE Products
SET Stock = Stock -1
FROM Products
INNER JOIN OrderDetails ON Products.ProductId = OrderDetails.ProductID
WHERE OrderDetails.OrderID = @OrderID
END
答案 0 :(得分:2)
逻辑有点偏。如果订单详细信息中包含多个项目(通常订单详细信息将包含数量字段),该怎么办?
你通常会做的是这样的事情:
CREATE PROCEDURE [dbo].[UpdateStock](@OrderID int)
AS
BEGIN
UPDATE Products
SET Stock = Stock - (select sum(quantity) from orderdetails od where od.productid = products.productid and od.orderid = @orderid)
FROM Products
Where productid in (select productid from orderdetails od where od.orderid = @orderid)
END
我不保证语法,但它应该让你知道如何做到这一点。这将允许数量> 1对任何一个订单明细和同一产品的多个订单明细。