代码之家  ›  专栏  ›  技术社区  ›  Johnno Nolan

空格联合错误

  •  -1
  • Johnno Nolan  · 技术社区  · 16 年前

    前几天,这件事让我抓狂了。您希望以下内容返回什么?

    SELECT 'X' AS line
    UNION
    SELECT 'X ' AS line
    

    请注意第二个选择框中的空格。 显然,SQL2000和2005都返回1个结果。尽管它是一个联盟(而不是所有的联盟)。

    我在网上的书上看不到这方面的东西。为什么会这样?我猜这是一只虫子。是这样还是有合理的理由?

    1 回复  |  直到 16 年前
        1
  •  6
  •   Cade Roux    16 年前

    在ANSI SQL标准中,指定以特殊方式处理尾随空间:

    http://support.microsoft.com/default.aspx/kb/316626

    http://support.microsoft.com/kb/154886/EN-US/

    我不确定二进制排序是否能解决这个问题:

    IF 'X ' COLLATE Latin1_General_BIN = 'X' COLLATE Latin1_General_BIN 
        PRINT 'Equal'
    

    这印的是“相等”