2013-08-25 182 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 
    ) 

消息512,級別16,狀態1,行4子查詢返回多個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 ...