我遵循简单的案例陈述
CASE WHEN @SPOID is not null THEN
(176)
ELSE
(SELECT designationID from setupdesignations where reportto = 99)
END
当该语句的else子句执行时,它给出了以下错误
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
我在IN
子句中使用此语句我期望在其他情况下返回多个结果但是它给了我上面的错误。如果我删除case语句并在查询中执行else部分,那么我得到预期的结果
答案 0 :(得分:3)
您不能将子选择用作CASE匹配中的表达式,它需要单个值。相反如何;
where
(@SPOID is not null and infield = 176)
or
(@SPOID is null and infield in (SELECT designationID from setupdesignations where reportto = 99))
答案 1 :(得分:2)
虽然您使用的是IN
子句,但CASE
语句只允许一行作为return语句。
你必须想出另一种方法。
答案 2 :(得分:1)
您可以尝试使用动态查询来实现最终目标。以下链接可能指向正确的方向 - 查看上一篇文章:http://forums.devx.com/showthread.php?t=150247
答案 3 :(得分:0)
尝试将您的in子句更改为:
... in
(SELECT designationID
from setupdesignations
where reportto = 99 and @SPOID is not null
UNION
SELECT 176 where @SPOID is null)