跨服务器、跨数据库、多表联合查询

  • 最近项目用到了跨数据库的多表联查,项目用的是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表

 

--创建链接服务器

exec sp_addlinkedserver 'server_tmp','','SQLOLEDB','远程服务器名或ip地址'
 
exec sp_addlinkedsrvlogin 'server_tmp','false',null,'用户名','密码'
 
exec sp_serveroption 'server_lnk','rpc out','true' --这个允许调用链接服务器上的存储过程
go
--调用:

exec server_tmp.数据库名.dbo.过程名 '参数'
--------------------- 
作者:cmx8818 
来源:CSDN 
原文:https://blog.csdn.net/cmx8818/article/details/81738751 
版权声明:本文为博主原创文章,转载请附上博文链接!

User_TA表:

跨服务器、跨数据库、多表联合查询_第1张图片

 

User_TB表:

跨服务器、跨数据库、多表联合查询_第2张图片

User_TC表:

3

 前提先建立链接服务器

https://blog.csdn.net/goodshot/article/details/78686688

实例代码:

复制代码

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

这样就是实现了跨服务器,跨数据库多表联查了

你可能感兴趣的:(MSSQL)