跨服务器,跨数据库查询并不是什么新鲜事,不过之前在工作中看到一段代码,之前也没有接触过数据库同义词,发现挺方便的。代码示例类似这样:

Sqlserver 使用同义词跨服务器数据库连表查询

  代码很普通,奇怪之处在于A 表在服务器ServerA的DatabaseA中,而B表在服务器ServerB的DatabaseB中。于是我第一反应是linked server,但可以这样写吗?没远程Server 的ip,没数据库名,居然也可以连表?于是开始Google。

  之后得出结论,确实使用了linked server,但加上了同义词 synonym。以下开始练习:

  1.首先建了数据库TestA,里面有表UserInfo,里面有一条记录,:

  Sqlserver 使用同义词跨服务器数据库连表查询

  2.然后建数据库TestB,表RoleInfo,也只有一条记录:

  Sqlserver 使用同义词跨服务器数据库连表查询

  先直接跨数据库查询,成功(这里我在本机在测试,因此就不加上跨Server了。如果需要跨Server测试,也是一样,只需要在数据库前加Server 示例地址就好)!得出结果:

Sqlserver 使用同义词跨服务器数据库连表查询

 

  看,sql 脚本需要指定数据库名,如果跨了服务器,还需要指定IP,这么麻烦,也易出错,需要改进:

  3.先添加linked server:

  Sqlserver 使用同义词跨服务器数据库连表查询

  

  4.给需要连接的表使用刚创建的linked server 创建同义词,

  Sqlserver 使用同义词跨服务器数据库连表查询

 

   5.最后一步,可以直接连表查询啦:

  Sqlserver 使用同义词跨服务器数据库连表查询

 

   参考地址:

  https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-addlinkedserver-transact-sql?view=sql-server-2017

  https://docs.microsoft.com/en-us/sql/relational-databases/synonyms/synonyms-database-engine?view=sql-server-2017

  

  

 

相关文章:

  • 2021-09-17
  • 2022-12-23
  • 2021-08-10
  • 2021-12-20
  • 2021-12-19
  • 2021-09-15
猜你喜欢
  • 2021-11-18
  • 2022-12-23
  • 2022-12-23
  • 2021-10-19
  • 2021-06-12
  • 2021-07-30
相关资源
相似解决方案