SQL Server存储过程与foreach

时间:2018-06-15 12:25:15

标签: sql-server stored-procedures

我正在创建一个网上商店,我希望使用存储过程来降低销售时的产品库存。

如果有重复的产品,我当前的存储过程不起作用。所以我想在我的存储过程中使用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

1 个答案:

答案 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对任何一个订单明细和同一产品的多个订单明细。