2010-05-21 76 views
4

我有一個數據庫FooDb與包含表Tbl(即FooDb.BarSchema.Tbl默認模式代名詞

我也登錄與BarSchema默認用戶的模式BarSchema

此查詢工作正常

SELECT * FROM FooDb..Tbl 

我也有此表的代名詞在另一個數據庫

CREATE SYNONYM TblSynonym FOR FooDb..Tbl 

但現在我得到一個錯誤「無效的對象名稱FooDb..Tbl「 「執行時

SELECT * FROM TblSynonym 

如果我將同義詞更改爲

CREATE SYNONYM TblSynonym FOR FooDb.BarSchema.Tbl 

它工作正常。

爲什麼沒有同義詞默認模式工作?如果我可以爲用戶上的每個數據庫設置默認模式,然後忽略,那麼這將會容易得多,因爲我們可以從幾個數據庫中合併數據庫,這些數據庫都具有相同的表名但不同的模式名。它無處不在的腳本)

回答

2

documentation暗示db..tbl語法應該工作:

schema_name_2是在 架構基本對象的名稱。如果未指定 模式名稱,則使用當前用戶的 默認模式爲 。

這對我的作品在SQL Server 2008:

create synonym TestSynonym for TestDB..TestTable 

一個原因可能是,默認架構與用戶,而不是數據庫相關聯。檢查您的用戶是否有意外的默認模式?在我的SSMS中,該設置位於數據庫 - >安全 - >用戶 - >屬性下。

+0

我已經驗證的默認模式是同時根據數據庫 - >安全 - >用戶和連接 - >安全 - > Logins->用戶正確。 (使用同義詞時發生錯誤,而不是在創建時發生錯誤) – adrianm 2010-05-21 09:23:38