1.通過(guò)sp_addlinkedserver創(chuàng)建連接服務(wù)器
--創(chuàng)建鏈接服務(wù)器,即建立遠(yuǎn)程服務(wù)器映射
exec sp_addlinkedserver 'RemoteSV' , '' , 'SQLOLEDB'
, '172.27.203.220'
--登錄鏈接服務(wù)器
exec sp_addlinkedsrvlogin 'RemoteSV' ,
'false' , null , 'AssetAdmin' , 'smgit'
--設(shè)置鏈接服務(wù)器屬性rpc與rpc
out為true,如果不需要執(zhí)行跨域存儲(chǔ)過(guò)程則不需設(shè)置此項(xiàng)
exec sp_serveroption
'RemoteSV','rpc','true'
exec sp_serveroption 'RemoteSV','rpc out','true'
使用方式:
增、刪、改、查等操作都可依據(jù)【鏈接服務(wù)器名.數(shù)據(jù)庫(kù)名.架構(gòu)名.表/視圖等對(duì)象名】形式進(jìn)行,但是好像不支持這樣調(diào)用函數(shù)
--查詢(xún):
select * from RemoteSV.數(shù)據(jù)庫(kù)名.架構(gòu)名.表/視圖名
--執(zhí)行跨域存儲(chǔ)過(guò)程
exec RemoteSV.數(shù)據(jù)庫(kù)名.架構(gòu)名.存儲(chǔ)過(guò)程名
--有鏈接服務(wù)器的情況下,還可以使用openquery函數(shù),如:
select * FROM openquery(RemoteSV ,
'SELECT * FROM 數(shù)據(jù)庫(kù)名.架構(gòu)名.表名')
--數(shù)據(jù)操作之后,刪除鏈接登錄、刪除鏈接服務(wù)器
exec sp_dropserver 'RemoteSV' , 'droplogins'
2.沒(méi)有鏈接服務(wù)器時(shí),可以使用openrowset或opendatasource函數(shù),在實(shí)施之前,需要在sql server的外圍應(yīng)用配置器中啟用OPENROWSET和OPENDATASOURCE支持
--以下兩種寫(xiě)法都可以,注意到?jīng)]有,最后一個(gè)參數(shù)可以寫(xiě)sql語(yǔ)句,這樣就可以跨域調(diào)用自定義函數(shù)了,相較于第一種方式,openrowset函數(shù)的優(yōu)勢(shì)是方便應(yīng)用于簡(jiǎn)單的sql語(yǔ)句中,如果是復(fù)雜的處理邏輯,需要有語(yǔ)句塊、函數(shù)或存儲(chǔ)過(guò)程才能完成,建議使用第一種方式,即時(shí)創(chuàng)建、銷(xiāo)毀鏈接服務(wù)器
select
* from openrowset('SQLOLEDB' , '172.27.203.220' ; 'AssetAdmin' ; 'smgit' ,
'select getdate()')
select * from openrowset('SQLOLEDB' , 'source=172.27.203.220;uid=AssetAdmin;pwd=smgit','select getdate()')
--另外還可以使用opendatasource函數(shù),如
select * from opendatasource('SQLOLEDB' ,
'Data Source=172.27.203.220; User ID=AssetAdmin;Password=smgit').數(shù)據(jù)庫(kù)名.架構(gòu)名.表名