SQL SERVER子查询错误

ACo*_*ter 1 t-sql sql-server

运行此查询后,出现以下错误.

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
      )
Run Code Online (Sandbox Code Playgroud)

消息512,级别16,状态1,行4子查询返回的值超过1.当子查询跟随=,!=,<,<=,>,> =或子查询用作表达式时,不允许这样做.

ta.*_*.is 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 ...
Run Code Online (Sandbox Code Playgroud)