2014-02-18 107 views

回答

3

dbo
使用dbo作爲所有數據庫對象的所有者可以簡化管理對象。您將始終在數據庫中有一個dbo用戶。只要用戶具有適當的權限,數據庫中的用戶就可以訪問dbo所擁有的任何對象,而無需指定擁有者。

使用X
當SQL Server登錄連接到SQL Server,登錄時自動連接到默認的數據庫並獲取數據庫用戶的安全上下文。如果沒有爲SQL Server登錄創建數據庫用戶,登錄將以guest用戶身份進行連接。如果數據庫用戶對數據庫沒有CONNECT權限,則USE語句將失敗。如果沒有默認數據庫分配給登錄,它的默認數據庫將被設置爲主。

Understanding the Difference between Owners and Schemas in SQL Server

USE (Transact-SQL)

0

通過使用第一個查詢,您可以從其他數據庫執行該選擇。在同一個窗口中,您還可以選擇其他數據庫。

但是,通過使用第二選擇,您可以從同一窗口中選擇僅用於該數據庫(USE X)的數據庫。

1

我傾向於使用[server].[database].[schema].[table]在其中的實例的腳本可以查詢從多個數據庫複式表。

USE [database]通常在場景中使用,所有陳述均適用於同一個數據庫,你需要確保它們被應用於正確數據庫。你有沒有連接到服務器,只運行一個腳本,發現你在master數據庫上運行它?

0

有時你希望模式和數據庫由登錄口授,在這種情況下,你應該簡單地使用對象名稱。這是不完全符合他們資格的原因之一。

1

使用X將上下文改爲X和下面的所有語句將上下文X.

下執行,但X.dbo.Y將訪問對象Ÿ不改變當前上下文。

例:讓我們考慮有兩個數據庫DB1和DB2。 DB1包含表T1 & T2並且DB2包含表U1 & U2。

現在,

USE DB1 -- here context set to DB1 

select * from T1 -- works fine 

select * from U1 -- gives error, because U1 is not in current context 

select * from DB2.dbo.U1 -- works fine, because it access the context DB2 from current content context DB1 

select * from T2 -- works fine 

USE DB2 -- here context changed to DB2 

select * from U2 -- works fine 

select * from T1 -- gives error, because T1 is not in current context 

select * from DB1.dbo.T1 -- works fine, because it access the context DB1 from current content context DB2