代码之家  ›  专栏  ›  技术社区  ›  Michael Todd

为什么在SqlServer中空格是有效的列名?

  •  10
  • Michael Todd  · 技术社区  · 17 年前

    create table #temp ([ ] varchar(1))
    insert into #temp values ('1')
    select [ ] from #temp
    

    6 回复  |  直到 15 年前
        1
  •  10
  •   JoshBerke    17 年前

    我认为其基本原理是:

    这值得预防吗 功能?

        2
  •  9
  •   Joel Coehoorn    17 年前

    在调试复杂查询时,我一直使用它作为占位符/分隔符。我可能有这样的想法:

    SELECT a.*, ' ' as [ ], b.*
    FROM a
    LEFT JOIN b on ...
    

    这样,我在两个表之间得到了一个空白部分,这样我就可以很容易地看到结果中一个停止,另一个开始的位置。

    也就是说,我想我没有理由不能在列名中使用其他名称。

        3
  •  4
  •   Peter Perháč    17 年前

    空格是可以接受的字符,因为有些人喜欢在列名中使用空格。如果它可以是列名的一部分,那么为什么列名本身不能呢?

    他们为什么要这样做对我来说仍然是个谜,因为这使编程变得更加困难(总是将所有内容都包含在“”或[]中)。事实上,我看到了一个带有问号的列名,这肯定是我在任何标识符中都不会使用的,但这仍然是可能的。

        4
  •  4
  •   Steven    17 年前

    在[]之间可以使用任何有效字符来定义列&表名。 考虑到[A Column]之类的内容是有效的(带有空格),没有理由阻止使用单个空格作为列名。

    但是,尾随空格将被删除,因此。

    [ ] and [  ] (1 & 2 spaces) 
    都将被视为
    [ ] (1 space).
    
        5
  •  2
  •   Jeroen Landheer    17 年前

        6
  •  2
  •   dkretz    17 年前

    我有点欣赏这样一种假设,即我有足够的责任,不会因为潜在的危险特征而伤害自己。我自己还没有找到在对象名中使用空格的好理由,但在某些情况下它似乎很流行。这是一个用剪刀跑步的极端例子。