【问题标题】:Syntax error when trying to next multiple select queries in a case statement尝试在 case 语句中执行下一个多个选择查询时出现语法错误
【发布时间】:2019-04-10 05:36:40
【问题描述】:
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

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

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

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

【问题讨论】:

  • CASE 是一个表达式,用于确定要返回的标量值。 IF用于控制流量。您应该在这里使用 IF 语句,而不是 case 表达式。
  • 了解如何使用CASESELECT CASE WHEN...THEN SELECT ... 肯定不行。
  • 感谢您的帮助!请在引用的问题中解释答案。这就是最受欢迎的答案正在做的事情。

标签: sql sql-server case


【解决方案1】:

您应该使用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

【讨论】:

    猜你喜欢
    • 2014-07-24
    • 2022-01-16
    • 1970-01-01
    • 2020-01-18
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多