跨服務器、跨數據庫、多表聯合查詢


  • 最近項目用到了跨數據庫的多表聯查,項目用的是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表:

1

User_TB表:

2

User_TC表:

3

 

實例代碼:

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

這樣就是實現了跨服務器,跨數據庫多表聯查了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM