我有一个类似的脚本:
DECLARE @OrderStatusIds VARCHAR(50);
SET @OrderStatusIds =
(SELECT OrderStatusId FROM OrderStatus WHERE OrderStatusDescription =
CASE
WHEN @OrderStatus = 'Open' THEN 'Open'
WHEN @OrderStatus = 'Cancelled' THEN 'Cancelled'
ELSE OrderStatusDescription -- get all order statuses
END
);
SELECT O.OrderNo, OS.OrderStatusDescription
FROM OrderHeader O
INNER JOIN OrderStatus OS ON O.OrderStatusId = OS.OrderStatusId
WHERE OH.OrderStatusId IN @OrderStatusIds
但是我得到一个错误
子查询返回了多个值。当子查询遵循=,!=,<,<=,>,> =或将子查询用作表达式时,不允许这样做。
我想获取项目列表并将其存储在该变量中。
谢谢。
答案 0 :(得分:1)
您将使用表变量存储订单ID的列表:
DECLARE @OrderIds TABLE (OrderId VARCHAR(50));
INSERT INTO @OrderIds (OrderId)
SELECT OrderId
FROM Order
WHERE ((OrderDescription = @OrderStatus) OR
@OrderStatus NOT IN ('Open', 'Cancelled')
);
请注意,这将CASE
替换为更简单的布尔逻辑。通常,您希望避免在CASE
子句中使用WHERE
,因为它们使优化程序更难以优化查询。