當我想從數據表Y在數據庫X選擇,我可以使用使用「USE」關鍵字比。在T-SQL
select * from [X].[dbo].[Y]
或
USE X
select * from [Y]
是否有任何理由,更喜歡一個比其他完整的表名?
當我想從數據表Y在數據庫X選擇,我可以使用使用「USE」關鍵字比。在T-SQL
select * from [X].[dbo].[Y]
或
USE X
select * from [Y]
是否有任何理由,更喜歡一個比其他完整的表名?
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 X
)的數據庫。
我傾向於使用[server].[database].[schema].[table]
在其中的實例的腳本可以查詢從多個數據庫複式表。
的USE [database]
通常在場景中使用,所有陳述均適用於同一個數據庫,你需要確保它們被應用於正確數據庫。你有沒有連接到服務器,只運行一個腳本,發現你在master
數據庫上運行它?
有時你希望模式和數據庫由登錄口授,在這種情況下,你應該簡單地使用對象名稱。這是不完全符合他們資格的原因之一。
使用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