SQL Server:使用大小写设置变量



我有一个脚本,比如:

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,因为它们会使优化器更难优化查询。

最新更新