1

运行此查询后,我收到以下错误。

DECLARE@Type 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 个值。当子查询跟在 =、!=、<、<=、>、>= 之后或当子查询用作表达式时,这是不允许的。

4

2 回答 2

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 ...
于 2013-08-25T10:16:05.580 回答
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)
于 2013-08-25T10:11:08.480 回答