【发布时间】:2020-03-24 14:26:30
【问题描述】:
这是程序:
CREATE PROCEDURE mysp_AddOrderLine
(@pOrderId INT,
@pQuantity INT,
@pRestaurantId INT,
@pFoodId INT)
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO SALES.OrderLine (OrderId, Quantity, RestaurantId, FoodId, LineTotal)
SELECT
@pOrderId, @pQuantity, @pRestaurantId, @pFoodId,
SUM(SOL.Quantity * F.UnitPrice)
FROM
SALES.OrderLine SOL
INNER JOIN
RESTAURANT.Food F ON SOL.FoodId = F.FoodId
-- Do you also need to filter on @pRestaurantId
WHERE
SOL.OrderId = @pOrderId AND SOL.FoodId = @pFoodId;
RETURN 0
END
DECLARE @pOrderId INT = 515, @pQuantity INT = 2,
@pRestaurantId INT = 6, @pFoodId INT = 24;
EXEC mysp_AddOrderLine @pOrderId, @pQuantity, @pRestaurantId, @pFoodId;
OrderLine 表目前没有值,所以我在其中插入新值。
它具有像 OrderLineId 是一个身份的属性,OrderId 从 Order 表返回,Quantity 我们必须通过存储过程插入它,RestaurantId 从 Restaurant 表和 @987654330 返回@ 来自Food 表。
请参阅随附的屏幕截图。为什么LineTotal 在OrderLine 表中为空?应该是 12 * 2 = 24?
【问题讨论】:
-
我不明白你的问题,值应该是你需要的值,让你的 SP 返回你想要的结果集。
-
不要认为参数 pLineTotal 应该是存储过程的一部分。它不是您传递给 SP 的参数。它似乎是内部计算的。您的创建过程不应该有这个 >>, @pLineTotal money 。只需在 SP 内部使用公式声明并设置它。
-
这行得通,我还修改了逻辑 SELECT @pLineTotal = (SOL.Quantity*F.UnitPrice)。然而,结果并不正确。 OrderLineId OrderId Qty RestaurantId FoodId LineTotal 39 515 2 6 24 NULL 40 516 3 2 30 24.00 41 517 5 8 32 48.00 获取 LineTotal 的结果为 NULL 的第一列和第一行 LineTotal 结果存储在第二行 LineTotal 结果和结果第二行 LineTotal 存储在第三行。不知道发生了什么。
-
@Neha 您缺少
where子句,请参阅下面的答案。 -
@Neha 另一个问题,但你真的想在订单中添加 another
OrderLine以包含sum吗?或者您真的想用linetotal更新现有的orderline?
标签: sql-server tsql join stored-procedures