2008-10-27 40 views
3

在SQL Server中,這是爲什麼:引用表

[dbo].[table_name] 

最好的:

dbo.table_name 

並沿着這些線路,爲什麼還要列出DBO所有,如果有隻有一個架構?

+0

可能重複[什麼用方括號的\ [\] SQL語句?(http://stackoverflow.com/questions/52898/what-is-the-使用的最平方括號 - 在-SQL語句) – bdukes 2014-03-10 14:28:57

回答

3

這只是如果你有一個關鍵字像[用戶]

4

如果表名稱中包含關鍵詞,你將不得不將其括在[]一個表名。大多數工具(如ORM)都使用這種技術來避免任何錯誤或保持一致性。

3

它允許表名中的關鍵字或標點符號。

它經常使用的代碼生成器所有的名字,所以他們沒有弄清楚它是否實際需要。

3

這些通常拿出生成的代碼 - 因爲它更容易使代碼生成產品完全合格,逃到比推導出什麼逃逸/須資格時的參考。

2

如果只有一個模式,那麼表名前綴不是必要的或我認爲有用。當您在sql server中有一個保留字的標識符時,使用括號[]很有用。例如,如果您有一個名爲Select的表格,您可以將其作爲SELECT * FROM [Select]而不是SELECT * FROM Select

0

難道這不會讓你在那裏有任何'壞'物品嗎?
關鍵字,空格等...

0

我寧願避免在表名和列名中使用標點符號和保留字,也不要使用方括號。這使得SQL更容易閱讀。

1

,如果你使用的關鍵字模式或表名,我不使用括號,這是隻需要你不應該。

但我會建議不要把dbo放在前面。原因是最終你可能想要開始將你的代碼組織到模式中,然後你需要前綴。如果你養成了使用schema.table格式的習慣,那麼lot會更容易在你的代碼中搜索使用表格的地方。

比方說,你有一個名爲dbo.user表,並決定將其移動到另一個模式。如果你必須通過一堆存儲過程或動態sql搜索「用戶」,你可能會得到大量的誤報。您無法完全確定您是否完成了所需的所有更改。搜索「dbo.user」更加簡潔。

1

僅當對象名稱包含空格等字符或關鍵字時才需要[]。通常認爲不使用任何這些對象名稱是最佳做法,所以您絕不需要[]。話雖如此,他們也沒有傷害,如果它是生成的代碼,幷包括括號,那麼你可以離開他們。
採用DBO是一個好主意監守

  1. 性能更好(見here對於一些數字)
  2. DBO需要在某些情況下,如主叫用戶定義的函數。我認爲總是包括它在內是更加有效的。
  3. 如果您創建了多個模式,那麼未定義對象名稱將來可能會導致錯誤。
0

除了空格,保留關鍵字,並且在標識符名稱的系統功能,標識符也可以包含未在regular identifiers允許一些字符,一個它必須用方括號分開。

您可以在this article中找到有關常規和分隔標識符的詳細說明和規則。

從文章:

例如,分隔標識符可以包含空格,任何字符 有效常規標識符,和以下 字符中的任何一個:

代字號(〜)連字符, ( - )(!)(。),感嘆號,左括號({),百分比(%), 右括號(}),插入符號(^),單引號('),符號(&),期間,左 括號((),反斜槓(),右括號()),重音符號(`),

使用兩個名稱限定約定可以提高性能(避免名稱解析),並避免在您擁有該名稱的情況下出現歧義。兩個或多個模式中的相同表名。在這種情況下,SQL Server將在dbo中搜索你的對象,如果它不在那裏,它將停止搜索。

此外,如果你以後想使用該對象使用SCHEMABINDING選項不允許不合格的對象名稱。

希望這有助於的