我有一個現有數據庫與現有記錄的副本。當我和桌面設計師一起玩時,發現有些列名在他們周圍[]。它們似乎都是任意類型的(float,datetime,netext,nvarchar等),並且在列屬性中沒有任何東西可以去掉[]。我嘗試重命名刪除[],但只要退出編輯,它就會重新生效。MS-SQL表設計器中方括號[]的含義?
根據this後,它是一個關於xml列的列嗎?但這些列都不是xml列。有人會向MS-SQL新手解釋這個目的嗎?謝謝
我有一個現有數據庫與現有記錄的副本。當我和桌面設計師一起玩時,發現有些列名在他們周圍[]。它們似乎都是任意類型的(float,datetime,netext,nvarchar等),並且在列屬性中沒有任何東西可以去掉[]。我嘗試重命名刪除[],但只要退出編輯,它就會重新生效。MS-SQL表設計器中方括號[]的含義?
根據this後,它是一個關於xml列的列嗎?但這些列都不是xml列。有人會向MS-SQL新手解釋這個目的嗎?謝謝
方括號[]
用於分隔標識符。如果列名是保留關鍵字或包含特殊字符(如空格或連字符),則這是必需的。
一些用戶也喜歡使用方括號,即使它們不是必需的。
從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.
括號內是在SQL Server中的特殊字符是用來明確界定信息。
它們可以按照文章在xml中使用,也可以用於指定具有空格或其他關鍵字的元名(列,表等)。
declare my column nvarchar(50)
將是無效的語法,但你可以做
declare [my column] nvarchar(50)
只是把它們當作明確的分隔符。
方括號可以放置周圍物體(例如意見,數據庫,列等)
它們的主要目的是,馬克提到的,封裝的對象,使得特殊字符,例如一個空格或期間不干擾用你的語法。
默認情況下,許多應用程序都使用方括號表示法,以進一步降低語法錯誤或任何此類問題的風險。
這是典型的很好的做法,不包含任何空格
Database_Name < GOOD PRACTICE
Database Name < GENERALLY TRY TO AVOID
在任何情況下,如果後者被使用,您可以使用方括號,即
select * from [Database Name]
+1,因爲「許多應用程序默認使用括號表示法,以進一步降低語法錯誤的風險」是實際答案。 – onedaywhen 2012-03-29 08:29:18
(他們可以引用任何標識,不只是列。) – 2012-03-28 23:41:45
有意義,所有具有'[]'的列名在它們的名字中也有'space'。然而,通過手動刪除'space'和'[]',表設計器仍然會自動添加'[]'? – Bonk 2012-03-28 23:42:57
@YonkShi它可能是爲了保持一致性(即使不需要,也不必擔心它是否與關鍵字衝突或包含特殊字符等)。除非有*代選項*來禁用此類(例如全局設置?),否則它將保持原樣。 – 2012-03-28 23:43:55