2011-09-27 59 views
2

我正在維護由SQL Server中的其他人創建的數據庫。在一張表中,我找到了一個名字在方括號之間的列。該字段的名稱是desc,它以[desc]的形式存儲在表中。其他字段沒有方括號存儲。這種選擇背後有什麼特別的理由/慣例嗎?是否有任何理由在方括號之間寫入數據庫列?

構建在數據庫之上的應用程序是用C#或VB.NET開發的。

感謝

+0

一個術語狡辯:當你說'它被存儲在表中'[desc]',你確定嗎?什麼工具告訴你?如果你已經使用SQL Mgmt Studio來創建'CREATE'腳本,它將會使得* runnable * T-SQL,這個保留字需要'[]' - 但是列的*名稱*不是「字段」)是'desc',這可以通過查詢'sys.columns'來看到。 – AakashM

回答

7

括號(或其他數據庫引擎中的其他標識符)只是告訴查詢引擎該術語是數據庫中對象的標識符的明確方式。常見原因包括:

  1. 包含空格的對象名除非用括號括起來,否則無法解析爲查詢的一部分。
  2. 作爲保留字的對象名稱可能無法解析(或者更糟糕的是,正確地解析並做出意想不到的事情)。

(我想也有可能是因爲引擎不需要試圖識別那個項目的含義,它已經被明確告知它是一個對象。仍然需要驗證,當然,但它可能是在內部工作的一個小幫助。)

+2

它也可以被認爲是一種好的做法,因爲你不會對你提到的問題有任何問題,而且你的意圖很明確。 – Thor84no

+0

@ Thor84no:絕對。值得注意的是,我見過的每一個代碼生成工具都創建了數據庫查詢(LINQ2SQL和EF是最好的例子)。一些額外的字節是一個很小的代價,需要付出更清晰,更明確的代碼。 – David

3

例如,如果你有一個字段是一個關鍵詞,例如[日期]或[選擇]或在這種情況下,[DESC]

4

如果你的名字包含任何的保留字(如SELECT)或空格,則需要用[]包圍名稱。

在你的例子中,你有[desc],這是DESCENDING的縮寫。

+2

實際上,它是降序的縮寫(如在ORDER BY子句中),但在其他方面是正確的。 –

+1

「DESCENDING」的縮寫,而不是「DESCRIBE」 – JNK

+0

對不起,您是對的。編輯。 –

相關問題