我有一个脚本,比如:
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
但我收到一个错误
子查询返回了多个值。当子查询跟在=、!=、<lt;=,>,>=或者当子查询用作表达式时。
我想获得一个项目列表并将其存储在该变量中。
谢谢。
您将使用一个表变量来存储订单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
。通常,您希望在WHERE
子句中避免使用CASE
,因为它们会使优化器更难优化查询。