2009-04-23 77 views
10

見自己:爲什麼空格在SqlServer中是一個有效的列名?

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

在世界上什麼是允許這樣做的理由?

+0

這很有趣; +1指出這樣的怪癖...... – 2009-04-23 16:51:23

+2

這只是一種方法來擰一些可憐的汁液,從現在起5年將保持應用程序!我只能看到他們拔頭髮,試圖瞭解一些動態查詢以及數據來自哪裏。 haa,它就像GOTO TOP一樣,但是你把「top」放在最下面,或者聲明一個名爲Five的變量,並將其設置爲5,但在其他地方改變它的值,這是製作過程中的經典! – 2009-04-23 21:17:29

回答

10

我覺得理線沿線的是更多:

是否值得防止這種 功能?

我不知道SQL是如何在內部進行編碼的,但我會懷疑需要花費更多的努力才能阻止它。

+0

現在這很好:)我喜歡你的理由+1 – 2009-04-23 16:58:31

+0

夠公平的。你可能是對的,但需要付出更多的努力來阻止它。 – 2009-04-23 17:09:27

9

我在調試複雜查詢時一直使用它作爲佔位符/分隔符。我可能有這樣的事情:

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

這樣,我在兩個表之間,所以我可以在結果很容易看到其中一個停止,其他開始得到一個空白部分。

後來當我得到結果和性能我需要我將更改select子句只使用我關心的列。

這就是說,我想沒有理由我不能使用別名作爲列名。

+1

+1一個很酷的小招讓我感到煩惱 – JoshBerke 2009-04-23 16:51:54

2

我想空間就像任何其他角色一樣。你甚至可以創建一個名爲[]的表格。 (我嘗試過了,它工作。)我認爲這沒有任何限制。

+0

也有桌子嗎?讓人驚訝。沒想到要嘗試。 – 2009-04-23 17:07:08

4

可以在[]之間使用任何有效字符來定義表名稱列&。 鑑於像[A Column]這樣的東西是有效的(有空格),沒有理由阻止一個空格作爲列名。

但是,尾隨空格將被刪除。

[ ] and [ ] (1 & 2 spaces)
將兩者視爲

 
[ ] (1 space). 
4

空間是一個可以接受的性格,有些人喜歡在他們的列名的空間。如果它可以是列名稱的一部分,那麼爲什麼不是列名本身呢?

爲什麼他們做這件事對我來說仍然是一個謎,因爲它使編程變得更加困難(不斷地將所有內容都包含在「」或「[]」中)。我實際上看到了一個帶有問號的列名,這絕對是我在任何標識符中都會避免使用的東西,但仍然有可能。

2

我有點欣賞這樣的假設,即我有足夠的責任心不要以潛在的危險特性傷害自己。我自己並沒有在對象名稱中找到空格的好理由,但它在某些情況下似乎很流行。這是剪刀運行的一個極端例子。

相關問題