亲眼看看:
create table #temp ([ ] varchar(1))
insert into #temp values ('1')
select [ ] from #temp
世界上允许这样做的理由是什么?
答案 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)
我有点赞赏这样的假设,即我有足够的责任,不会因为潜在的危险特征而伤害自己。我自己没有找到对象名称中空格的充分理由,但在某些情况下似乎很受欢迎。这是用剪刀跑步的一个极端例子。