2012-01-11 4 views
3

я ве следующий простой сазеДело Выпуск в SQL заявление с заявлением в

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

ответ

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 оператор допускает только одну строку в качестве оператора возврата.

Вам нужно будет определить другой способ сделать это.

1

Вы можете попробовать использовать динамический запрос для достижения конечной цели. Следующая ссылка может указывать вам в правильном направлении - проверить последнее сообщение: http://forums.devx.com/showthread.php?t=150247

0

Попробуйте изменить положение в к:

... in 
(SELECT designationID 
from setupdesignations 
where reportto = 99 and @SPOID is not null 
UNION 
SELECT 176 where @SPOID is null) 
Смежные вопросы