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

时间:2009-04-23 16:46:39

标签: sql-server

亲眼看看:

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

世界上允许这样做的理由是什么?

6 个答案:

答案 0 :(得分:10)

我认为理由更多的是:

  

值得阻止这一点   功能?

我不知道SQL是如何在内部编码的,但我怀疑它会花费更多的努力来阻止它然后允许它。

答案 1 :(得分:9)

在调试复杂查询时,我一直将它用作占位符/分隔符。我可能会有这样的事情:

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

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

稍后当我得到我需要的结果和性能时,我会将select子句更改为仅使用我关心的列。

那就是说,我想我没有理由不能使用别的东西作为列名。

答案 2 :(得分:4)

可以在[]之间使用任何有效字符来定义列&表名。 鉴于像[A Column]这样的东西是有效的(带空格),没有理由阻止单个空格作为列名。

但是,删除了尾随空格。

[ ] and [  ] (1 & 2 spaces) 
将被视为

[ ] (1 space).

答案 3 :(得分:4)

空间是一个可接受的角色,因为有些人喜欢在列名中加上空格。如果它可以是列名的一部分,那么为什么不是列名呢?

为什么他们这样做对我来说仍然是一个谜,因为它使编程变得更加困难(不断地将所有内容括在“”或[]中)。我实际上看到一个带有问号的列名,这绝对是我在任何标识符中都要避免使用的东西,但它仍然是可能的。

答案 4 :(得分:2)

我猜一个空间就像任何其他角色一样。您甚至可以创建一个名为[]的表。 (我试过了,但它确实有效。)我认为对此没有任何限制。

答案 5 :(得分:2)

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