默认模式同义词

时间:2010-05-21 08:42:34

标签: sql-server

我有一个数据库FooDb,其架构BarSchema包含一个表Tbl(即FooDb.BarSchema.Tbl

我也以默认为BarSchema的用户身份登录。

此查询正常

SELECT * FROM FooDb..Tbl

我在另一个db

中也有这个表的同义词
CREATE SYNONYM TblSynonym FOR FooDb..Tbl

但现在我在执行

时收到错误“无效的对象名称'FooDb..Tbl'”
SELECT * FROM TblSynonym

如果我将同义词改为

CREATE SYNONYM TblSynonym FOR FooDb.BarSchema.Tbl

它工作正常。

为什么默认架构不能用于同义词?

(背景是我正在从几个数据库中提供数据,这些数据库都有相同的表名但有不同的模式名称。如果我可以为用户设置每个数据库的默认模式然后忽略它,那将会容易得多。在剧本的任何地方)

1 个答案:

答案 0 :(得分:2)

documentation建议db..tbl语法应该有效:

  

schema_name_2是的名称   基础对象的模式。如果   schema_name未指定   当前用户的默认架构是   使用

这适用于SQL Server 2008:

create synonym TestSynonym for TestDB..TestTable

一个原因可能是默认架构与用户而不是数据库相关联。检查您的用户是否有意外的默认架构?在我的SSMS中,该设置位于数据库 - >下。安全 - >用户 - >属性。