带有IN语句的SQL语句中的案例问题

时间:2012-01-11 11:33:42

标签: sql sql-server sql-server-2008 tsql

我遵循简单的案例陈述

 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部分,那么我得到预期的结果

4 个答案:

答案 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)