尝试在case语句中下一个多个选择查询时的语法错误

时间:2018-11-06 19:10:45

标签: sql sql-server case

BEGIN
    SELECT
        CASE
           WHEN @field1 != '' 
              THEN (SELECT <some stuff>
                    FROM <table>
                    WHERE col1 = @field1 
                      AND col2 = CASE WHEN ISNULL(@field2, -1) = -1 
                                         THEN col2 ELSE @field2 END)
           WHEN @field3 != '' 
              THEN (SELECT <some stuff>
                    FROM <table>
                    WHERE col3 = @field3)
       END

我已经从上面开始了存储过程。这个想法是,您可以搜索多个列,因此在给定的搜索中不存在大多数数据。我正在尝试根据随值传递的参数来创建不同的搜索。我从these答案之一中获取了上述内容的常规语法,但出现以下错误。

很明显我做错了,如果重要的话,这就是SQL Server 2017

  

第20行,第15级,状态1,过程测试,消息102 [批处理开始第5行]
  ')'附近的语法不正确。

     

消息102,级别15,状态1,过程测试,第27行[批处理开始第5行]
  “ END”附近的语法不正确。

编辑:请注意,第一个错误在第二个when语句之前引用了括号。

1 个答案:

答案 0 :(得分:2)

您应该使用IF选择要返回的查询。通过使用CASE,您将返回标量值而不是数据集。这样的事情应该起作用:

IF @field1 <> '' BEGIN
    select <some stuff>
    from <table>
    where col1 = @field1 and col2 = case when isnull(@field2,-1) = -1
        then col2 else @field2 end
END ELSE IF @field3 <> '' BEGIN
    select <some stuff>
    from <table>
    where col3 = @field3
END