代码之家  ›  专栏  ›  技术社区  ›  adrianm

默认架构同义词

  •  4
  • adrianm  · 技术社区  · 15 年前

    我有数据库 FooDb 使用架构 BarSchema 包含表的 Tbl (即 FooDb.BarSchema.Tbl )

    我还以用户身份登录 柱状图 作为默认值。

    此查询工作正常

    SELECT * FROM FooDb..Tbl
    

    我在另一个数据库中也有此表的同义词

    CREATE SYNONYM TblSynonym FOR FooDb..Tbl
    

    但现在我犯了个错误 “对象名'foodb..tbl'无效” 执行时

    SELECT * FROM TblSynonym
    

    如果我把同义词改成

    CREATE SYNONYM TblSynonym FOR FooDb.BarSchema.Tbl
    

    它工作得很好。

    为什么默认模式在同义词中不起作用?

    (背景是我正在整合来自几个数据库的数据,这些数据库都有相同的表名,但模式名不同。如果我可以为用户上的每个数据库设置默认模式,然后在脚本中的任何地方忽略它,那就容易多了)

    1 回复  |  直到 15 年前
        1
  •  2
  •   Andomar    15 年前

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

    schema_name_2是 基本对象的架构。如果 未指定架构名称 当前用户的默认架构为 使用。

    这在SQL Server 2008中对我有效:

    create synonym TestSynonym for TestDB..TestTable
    

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