跨伺服器 跨資料庫 多表聯合查詢

2021-09-10 03:53:09 字數 1877 閱讀 2730

首頁假如我們有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.過程名 '引數'

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_bas(

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
這樣就是實現了跨伺服器,跨資料庫多表聯查

跨資料庫 跨伺服器查詢

if notexists select srvname from master dbo sysservers where srvname vlinkinadmin begin exec sp dropserver server vlinkinadmin droplogins droplogins 增...

MSSQL跨伺服器資料庫查詢

建立鏈結伺服器 exec sp addlinkedserver 鏈結伺服器名稱 sqloledb 遠端伺服器名或ip位址 exec sp addlinkedsrvlogin 鏈結伺服器名稱 false null,需要鏈結伺服器使用者名稱 密碼 刪除鏈結伺服器exec sp droplinkedsrv...

sql跨資料庫伺服器查詢

insert into carvingcertificate select from openrowset sqloledb 12.12.12.10 sjjh jsgdzy select id,sno,carvingcertificatenum,carvingareaid,create date,c...