我有一个数据库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
它工作正常。
为什么默认架构不能用于同义词?
(背景是我正在从几个数据库中提供数据,这些数据库都有相同的表名但有不同的模式名称。如果我可以为用户设置每个数据库的默认模式然后忽略它,那将会容易得多。在剧本的任何地方)
答案 0 :(得分:2)
documentation建议db..tbl
语法应该有效:
schema_name_2是的名称 基础对象的模式。如果 schema_name未指定 当前用户的默认架构是 使用
这适用于SQL Server 2008:
create synonym TestSynonym for TestDB..TestTable
一个原因可能是默认架构与用户而不是数据库相关联。检查您的用户是否有意外的默认架构?在我的SSMS中,该设置位于数据库 - >下。安全 - >用户 - >属性。