SQL跨伺服器操作

2022-05-29 08:24:09 字數 2141 閱讀 1762

mssql可以跨伺服器遠端對mssql、excel、db2、oracle、xml...等資料來源執行操作,對不同的資料來源提供不同的介面,這裡使用msdasql驅動介面作為示例。

1.建立連線伺服器並建立鏈結伺服器登陸

exec   sp_addlinkedserver 'test_remot','','msdasql',null,null,'driver=;server=10.64.29.14;uid=sa;pwd=sa;'  

exec   sp_addlinkedsrvlogin @rmtsrvname='test_remot',@useself='false',@locallogin='sa',@rmtuser='sa',@rmtpassword='sa'  

go 這裡只對已填的引數作下說明,其它的可以到msdn查閱

'test_remot':鏈結伺服器名稱

'msdasql':驅動型別

'driver=;server=10.64.29.14;uid=sa;pwd=sa2005;':驅動連線字串,server(遠端伺服器ip) uid(遠端資料庫登入使用者名稱) pwd(遠端資料庫登入密碼)

@rmtsrvname:鏈結伺服器名稱

@locallogin:本地使用者

@rmtuser:遠端使用者

@rmtpassword:遠端使用者密碼

2.查詢

示例:select * from openquery(test, 'select * from tablename')

可簡寫為:select filed1,filed2... from test.databasename.dbo.tablename where filed=value

3.插入

示例:insert into openquery(test, 'select * from tablename where 1=0') values(3,6,'andy')

可簡寫為: insert into test.databasename.dbo.tablename values(3,6,'andy')

4.更新

示例:update openquery(test, 'select * from tablename') set role_id = 'fortest' where id = 3

可簡寫為:update test.databasename.dbo.tablename set role_id = 'fortest' where id = 3

5.刪除

示例:delete openquery(test, 'select * from tablename') where id = 1

可簡寫為:delete test.databasename.dbo.tablename where id = 1

6.儲存過程

示例:exec test.databasename.dbo.sp_oa_copy @inputvalue,@outputvalue output

7.openquery 的日期時間條件式

不建議使用:select * from openquery(test ,'select * from tablename ') where filed='2009-11-06'

該語句查詢耗時18s;很明顯return的資料相當大,再進行篩選;

建議使用:select * from openquery(test ,'select * from tablename ') where filed= ')

該語句查詢耗時3s;在test執行完篩選才return的,table的資料量越大效果越明顯;

8.使用msdasql驅動不支援項

1.不支援xml欄位插入、更新

2.執行儲存過程時,儲存過程中不能包括臨時表,如果包括則要在執行儲存過程前加上 set fmtonly off

注:需要對xml欄位插入、更新時,我們可以呼叫遠端儲存過程完成

9.還可以使用:opendatasource、openrowset進行跨庫跨資料伺服器操作。

網上找到乙個圖用於描述操作過程:

跨伺服器的SQL操作 (OPENROWSET)

今天遇到跨伺服器資料庫同步的需求,總起來說應該有兩種方法 1 起本地事務,連線其它資料庫的操作由sql自己內部事務控制 2 註冊分布式事務 先要前sql連線串中新增enlist false 取消自動事務註冊 下邊是第一種方法,使用openrowset,更新跨伺服器資料庫表 openrowset sq...

SQL 跨伺服器訪問

訪問不同電腦上的資料庫 遠端只要聯好網就一樣 如果經常訪問或資料量大,建議用鏈結伺服器 建立鏈結伺服器 exec sp addlinkedserver srv lnk sqloledb 遠端伺服器名或ip位址 exec sp addlinkedsrvlogin srv lnk false null,...

SQL跨伺服器查詢

sql跨伺服器查詢的二種實現方法 select from opendatasource sqloledb data source 遠端ip user id sa password 密碼 庫名.dbo.表名 insert 本地庫名.表名 select from opendatasource sqlol...