2012-01-11 106 views
3

我VE下面這個簡單的case語句案例問題中陳述

CASE WHEN @SPOID is not null THEN 
      (176) 
     ELSE 
      (SELECT designationID from setupdesignations where reportto = 99) 
     END 

當本聲明的其他條款執行它給了我下面的錯誤

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

這僅僅是一個值。無論從這裏返回什麼都應該在上面查詢的IN塊中 – Tassadaque 2012-01-11 11:44:43

回答

3

您不能在CASE匹配中使用子查詢作爲表達式,它需要單個值。反而如何;

where 
    (@SPOID is not null and infield = 176) 
or 
    (@SPOID is null and infield in (SELECT designationID from setupdesignations where reportto = 99)) 
2

雖然使用的是IN子句,CASE語句只允許一個行作爲return語句。

你必須想出另一種方式來做到這一點。

0

試着改變你的子句:

... in 
(SELECT designationID 
from setupdesignations 
where reportto = 99 and @SPOID is not null 
UNION 
SELECT 176 where @SPOID is null)