2013-08-25 2 views
1

После запуска этого запроса я получаю следующую ошибку.Ошибка подзапроса SQL SERVER

[email protected] int,@SearchStr2 nvarchar(200) 
SET @Type=1 
SET @SearchStr2 = 'A' 
SELECT * FROM Document WHERE DocNo in(
CASE @Type 
     WHEN 1 THEN 

     (SELECT DocNO FROM Publisher WHERE CONTAINS((PublisherName), @SearchStr2) 
     ) 
     WHEN 2 THEN 
     (SELECT DocNO FROM Publisher WHERE CONTAINS((PublishedPlace), @SearchStr2) 
     ) 
     WHEN 3 THEN 
     (SELECT DocNO FROM Publisher WHERE CONTAINS((PublishedDate), @SearchStr2) 
     ) 

     END 
    ) 

Msg 512, Level 16, State 1, Line 4 Subquery вернулся более чем на 1 значение. Это недопустимо, когда подзапрос следует =,! =, <, < =,>,> = или когда подзапрос используется как выражение.

ответ

3

Один или несколько из этих запросов возвращают более 1 строки.

SELECT DocNO FROM Publisher WHERE CONTAINS((PublisherName), @SearchStr2) 

SELECT DocNO FROM Publisher WHERE CONTAINS((PublishedPlace), @SearchStr2) 

SELECT DocNO FROM Publisher WHERE CONTAINS((PublishedDate), @SearchStr2) 
7

CASE @Type WHEN ... END необходимо оценить значение. Ваши подзапросы не делают этого, в соответствии с сообщением об ошибке.

Вы, вероятно, хотите написать что-то вроде этого:

WHERE (@Type = 1 AND DocNo IN (SELECT DocNo FROM Publish WHERE <Use PublisherName>)) 
    OR (@Type = 2 AND DocNo IN (SELECT DocNo FROM Publish WHERE <Use PublishedPlace>)) 
    OR ... 
Смежные вопросы