2011-03-19 80 views
2

我已經下載並將AdventureWorks數據庫附加到本地SQL Server 2005開發版。但不幸的是,並非所有表和其他數據庫對象都有前綴dbo。而當我想運行一些查詢時,我必須針對例如名爲Production.Contact的表進行操作。我想這樣的運行查詢:AdventureWorks數據庫和dbo前綴

select * from Contact 

而不是

select * from Person.Contact 

我想了解爲什麼一些表具有前綴dbo和其他人沒有。我希望所有的表都有dbo前綴,我可以用它們的名字對它們運行查詢,而不需要任何額外的前綴(我的意思是模式名稱)。 Person是一個Schema名稱。我不希望被迫在我的查詢中有這個。 :(

我怎樣才能做到這一點?

請幫助。

+0

我不知道我理解你的問題。你能解釋一下你試圖從數據庫中檢索什麼嗎? (即客戶名稱或其他?)我沒有看到SQL Server 2005 adventureworks的產品表中的聯繫人字段。 http://msdn.microsoft.com/en-us/library/ms124719(v=SQL.90).aspx – wilbbe01 2011-03-19 03:59:03

回答

4

您看到的dbo前綴稱爲架構。這與產品相同。該架構有點像SQL Server的命名空間。如果你想嘗試在產品架構轉移表到dbo架構,你可以使用下面的語法:

ALTER SCHEMA dbo TRANSFER product.[someTable] 

但是,如果在產品架構中的表名dbo架構已經存在,你會不能這樣做,因爲你不能有兩個同名的表。大多數情況下,您的模式將用於組織目的。

加成

你並不需要添加的原因 'DBO'。查詢中的模式前綴是因爲這是每個數據庫的默認模式。當你在沒有這個模式的情況下編寫查詢時,SQL Server會假定你的意思是'dbo'。一些最佳實踐聲明您的查詢應始終包含架構。

+0

正如我在我的文章中提到的,默認模式不是每個數據庫,但每個用戶。每個用戶可以有不同的默認模式,但是dbo是在未另行指定的情況下選擇的缺省模式(缺省「默認模式」)。 – 2011-03-20 02:31:40

2

你可以做到的唯一方法你問是您使用與產品架構登錄您的用戶帳戶相關聯。這將使產品架構成爲用戶登錄的默認架構,儘管當然您可能只有一個。

我認爲更廣泛的一點是,在SQL 2005中編寫查詢時,預計必須使用模式限定對象名稱,