2012-03-28 56 views
18

我有一個現有數據庫與現有記錄的副本。當我和桌面設計師一起玩時,發現有些列名在他們周圍[]。它們似乎都是任意類型的(float,datetime,netext,nvarchar等),並且在列屬性中沒有任何東西可以去掉[]。我嘗試重命名刪除[],但只要退出編輯,它就會重新生效。MS-SQL表設計器中方括號[]的含義?

根據this後,它是一個關於xml列的列嗎?但這些列都不是xml列。有人會向MS-SQL新手解釋這個目的嗎?謝謝

回答

39

方括號[]用於分隔標識符。如果列名是保留關鍵字或包含特殊字符(如空格或連字符),則這是必需的。

一些用戶也喜歡使用方括號,即使它們不是必需的。

MSDN

分隔標識符

括在雙引號(「)或方括號([]),其與規則遵守標識符可以是或的格式標識符。

SELECT * 
FROM [TableX]   --Delimiter is optional. 
WHERE [KeyCol] = 124 --Delimiter is optional. 

不符合所有標識符規則的標識符必須是分隔符d在Transact-SQL語句中。

SELECT * 
FROM [My Table]  --Identifier contains a space and uses a reserved keyword. 
WHERE [order] = 10 --Identifier is a reserved keyword. 
+2

(他們可以引用任何標識,不只是列。) – 2012-03-28 23:41:45

+0

有意義,所有具有'[]'的列名在它們的名字中也有'space'。然而,通過手動刪除'space'和'[]',表設計器仍然會自動添加'[]'? – Bonk 2012-03-28 23:42:57

+1

@YonkShi它可能是爲了保持一致性(即使不需要,也不必擔心它是否與關鍵字衝突或包含特殊字符等)。除非有*代選項*來禁用此類(例如全局設置?),否則它將保持原樣。 – 2012-03-28 23:43:55

1

括號內是在SQL Server中的特殊字符是用來明確界定信息。

它們可以按照文章在xml中使用,也可以用於指定具有空格或其他關鍵字的元名(列,表等)。

declare my column nvarchar(50) 

將是無效的語法,但你可以做

declare [my column] nvarchar(50) 

只是把它們當作明確的分隔符。

4

方括號可以放置周圍物體(例如意見,數據庫,列等)

它們的主要目的是,馬克提到的,封裝的對象,使得特殊字符,例如一個空格或期間不干擾用你的語法。

默認情況下,許多應用程序都使用方括號表示法,以進一步降低語法錯誤或任何此類問題的風險。

這是典型的很好的做法,不包含任何空格

Database_Name < GOOD PRACTICE 

Database Name < GENERALLY TRY TO AVOID 

在任何情況下,如果後者被使用,您可以使用方括號,即

select * from [Database Name] 
+1

+1,因爲「許多應用程序默認使用括號表示法,以進一步降低語法錯誤的風險」是實際答案。 – onedaywhen 2012-03-29 08:29:18