跨服务器,跨数据库查询并不是什么新鲜事,不过之前在工作中看到一段代码,之前也没有接触过数据库同义词,发现挺方便的。代码示例类似这样:
代码很普通,奇怪之处在于A 表在服务器ServerA的DatabaseA中,而B表在服务器ServerB的DatabaseB中。于是我第一反应是linked server,但可以这样写吗?没远程Server 的ip,没数据库名,居然也可以连表?于是开始Google。
之后得出结论,确实使用了linked server,但加上了同义词 synonym。以下开始练习:
1.首先建了数据库TestA,里面有表UserInfo,里面有一条记录,:
2.然后建数据库TestB,表RoleInfo,也只有一条记录:
先直接跨数据库查询,成功(这里我在本机在测试,因此就不加上跨Server了。如果需要跨Server测试,也是一样,只需要在数据库前加Server 示例地址就好)!得出结果:
看,sql 脚本需要指定数据库名,如果跨了服务器,还需要指定IP,这么麻烦,也易出错,需要改进:
3.先添加linked server:
4.给需要连接的表使用刚创建的linked server 创建同义词,
5.最后一步,可以直接连表查询啦:
参考地址:
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