2013-08-25 147 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 ...