跨服务器、跨数据库、多表联合查询
今天看到了一个数据库的博客园,里面是多表查询。对比之下我们学的实在是太简单了,现将原文章奉上。
- 最近项目用到了跨数据库的多表联查,项目用的是MVC4+EF,项目用到了很多数据库,每一个数据库都得建一个edmx文件,造成了项目的大量的edmx文件,这样给人一种项目很庞大很复杂,无疑间加剧了程序员编写代码的复杂度。
- 如果是不同的服务器上的多表联查的话,会更加复杂。
- 下面我讲一讲我自己的思路:
首页假如我们有3台服务器,分别是操作数据库的服务器A,第二台服务器B192.168.1.136,第三台服务器C192.168.1.125
注:关闭服务器上的防火墙(查询出错的话)
我们在A服务器上建立UserA数据库的User_TA表,B上建立UserB数据库的User_TB表,C上建立UserC数据库的User_TC表
User_TA表:
User_TB表:
User_TC表:
实例代码:
select * from ( select * from opendatasource ( 'SQLOLEDB', 'Data Source=192.168.1.136;User ID=sa;Password=000' ).UserB.dbo.UserTB as t1 ) as tt1 join ( select * from opendatasource ( 'SQLOLEDB', 'Data Source=192.168.1.125;User ID=sa;Password=123' ).UserC.dbo.User_TC as t1 ) as tt2 on tt1.UserID=tt2.UserID
上面的代码虽然可以查询出来,但是给人一种繁琐的感觉,那么我们应该如何简化它呢,就想到了视图。
首先将服务器B和C 的表在服务器A生成视图
create View View_User_B as ( select * from opendatasource ( 'SQLOLEDB', 'Data Source=192.168.1.136;User ID=sa;Password=000' ).UserB.dbo.UserTB as t1 ) as tt1 ) create View View_User_C as ( select * from opendatasource ( 'SQLOLEDB', 'Data Source=192.168.1.125;User ID=sa;Password=123' ).UserC.dbo.User_TC as t1 )
那么我们就可以简化查询了:
select * from dbo.View_User_B as t1 join View_User_C as t2 on t1.UserID=t2.UserID
这样就是实现了跨服务器,跨数据库多表联查了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现