代码之家  ›  专栏  ›  技术社区  ›  Mike D

带有“else”的SQL Server查询

  •  1
  • Mike D  · 技术社区  · 14 年前

    我有各种各样的vb6项目要维护,其中一些查询被传递到服务器,并在case语句中使用冒号“else:”。

    我想知道有人能告诉我结肠的作用是什么吗?它在sql2005及更高版本中会导致错误,但sql2000工作时没有任何投诉。

    我只想从代码重新编译中删除它,但恐怕它会破坏应用程序中的10个其他内容。

    事先谢谢…

    3 回复  |  直到 14 年前
        1
  •  4
  •   Raj More    14 年前

    这是交易……有人在代码中使用else关键字作为标签。

    TSQL中后跟冒号的单词是一个标签。这是一个示例:

    DECLARE @Count int
    SET @Count = 0
    
    ONE_MORE_TIME:
    IF @Count <> 33
        PRINT ‘Hello World’
        SET @Count = @Count + 1
    END
    
    IF @Count <> GOTO ONE_MORE_TIME
    

    在您的情况下,标签可能是“else”

    DECLARE @Count int
    SET @Count = 0
    
    ELSE:
    IF @Count < 33
        PRINT ‘Hello World’
        SET @Count = @Count + 1
    END
    
    IF @Count < 33 GOTO ELSE
    

    我觉得这段代码的缩进也会很严重。我几乎愿意在那上面花点钱。

        2
  •  0
  •   ChrisLively    14 年前

    为什么不删除它、重新编译和测试应用程序,看看它可能会有什么影响?

        3
  •  0
  •   rlb.usa    14 年前

    嗯,它会导致sql2005出错吗?

    在SQL Server中,else用于case语句捕获任何尚未捕获到的内容(它与所有其他情况都“失败”的内容有关)。 For example ,假设我们要从价格数据库中列出一些项目,并用自定义的“预算”文本列对它们进行分类,因此对于每个项目,我们将查看其价格并设置其“预算”值应为:

    SELECT title, price,
            Budget = CASE price
             WHEN price > 20.00 THEN 'Expensive'
              WHEN price BETWEEN 10.00 AND 19.99 THEN 'Moderate'
              WHEN price < 10.00 THEN 'Inexpensive'
              ELSE 'Unknown'
            END,
    FROM titles
    

    这里的另一个捕捉到的是不是真正属于“昂贵”或“中等”或“便宜”的所有东西。删除这些ELSE肯定会把你的查询搞砸。