SQL Server 模式和名稱解析

2022-02-26 10:12:43 字數 1718 閱讀 5891

模式實際上是命名空間,因此在sql serve中呼叫資料庫物件時,一定要設定物件引用的環境。每個使用者都被賦予了乙個預設模式,在使用者登入sql server並凋用資料庫物件時,這個預設模式就是物件引用方式的區別機制。

與許多其他資料庫產品一樣,sql server也使用模式來組織物件,所以理解如何正確地訪問這些物件是很重要的。

如果使用隨sql scrver一起安裝的adventureworks2008資料庫,且所用的登入被賦予了dbq預設模式,就必須使用如下語法杳詢product表:

select

*from production.product

在sql scrvcr的早期版本中,物件通常被dbo使用者擁有。如果不使用使用者名稱作為物件引用的字首,系統就預設使用db0使用者名稱。sql server 2005和2008的模式也是這樣,物件可以屬於dbo模式,如果在物件引用中不使用模式名,只要dbo是預設模式,系統就使用dbo模式。然而,如果預設模式從dbo改為其他模式,dbo模式就不會被使用了。如果物件使用其他模式,就必須在表示式中指定模式名。以下這個例子說明了這個功能。使用者fred將名為bedrock1的spl server例項連線到adventure works2008資料庫上,fred的預設模式沒有明確指定,所以這個模式預設設定為dbo然後fred執行了下列查詢:

select

*from product

查詢處理器嘗試將product表名解析為bedrock1.adventureworksz008.dbo.product ,但是這個杳詢執行失敗了。原因在於product表存在與production模式中,而不是在dbo模式中。現在將fred的預設模式改成:

alter

user fred with default_schema = production

當fred再次執行查詢時,查詢處理器將product表名解析為 bedrock1.adventureworks2008.production.product,查詢執行成功。

現在看乙個相反的例子。使用者barney是助理 dba,他將資料庫連線到和fred一樣的例項上,但要檢索dbo模式中的dbaudit表的內容,barney的預設模式也被設定為production。barney執行了下列查詢:

select

*from dbaudit

查詢處理器先嘗試將dbaudit表解析為barney的預設模式bedrock1.adventureworks2008.production.dbaudit,但解析失敗了。不過,由於查詢處理器是從非dbo模式開始的,於是它返回dbo模式,並嘗試經dbaudit表解析為bedrock1.adventureworks2008.dbo.dbaudit。 這個解析是成功的,它返回了表的內容。

這種返回解析方式能夠處理兩種情況:一種是物件不在使用者的預設模式中,而在dbo模式中的情況;另一種是物件不在使用者的預設模式中,而在sys模式中的情況。sys模式是為系統物件保留的。包含可以管理sql server資料庫的系統檢視。

最後,理解不同模式中的表可以重名是很重要的。因此在sales模式、production模式和humanresources模式中都可以建立user表。但此時必須用表的兩部分名字來引用表,才能確保返回正確的資料。為什麼要建立3個重名的表暱?因為sql server模式不僅是命名空間,還是乙個安個環境。dba可以給銷售經理授予在sales.user表中新增和刪除使用者的許可權,但拒絕他訪問productian.user表。這是管理安全性和應用程式訪問的另一種方式。

獲取本機SqlServer名稱

using system.data.sql 檢索包含有關可用sql server例項的資訊的表,必須先使用共享 靜態instance屬性來檢索列舉器 sqldatasourceenumerator instance sqldatasourceenumerator.instance 呼叫 getdat...

SQLSERVER 修改伺服器名稱

已經將這兩個伺服器通過名字分開了,而且我們通過ssms也的確看到了2個不同的伺服器 但是在配置複製的時候卻出了問題,我在ms zy上配置了資料庫分發,配置成功,接下來想在ms zy2上配置訂閱,可是卻報錯。於是我就試一下在ms zy2上配置分發,同樣報錯,報錯內容為 顯然,雖然在作業系統中將機器名修...

sql server修改資料庫名稱

use master go 修改資料庫名稱 alter database hroa i set single user with rollback immediate goexec master.sp renamedb hroa i hp oa goalter database hp oa set ...