鏈接服務器,不同服務器數據庫之間的數據操作

 --*********************************************************************************
--                 鏈接服務器,不同服務器數據庫之間的數據操作
--*********************************************************************************
1、--創建鏈接服務器 
exec sp_addlinkedserver   '鏈接服務器名', ' ', 'SQLOLEDB', '遠程服務器名或ip地址 ' 
exec sp_addlinkedsrvlogin  '鏈接服務器名', 'false ',null, '用戶名', '密碼'

2、啓動兩臺服務器的MSDTC服務 
MSDTC服務提供分佈式事務服務,如果要在數據庫中使用分佈式事務,
必須在參與的雙方服務器啓動MSDTC(Distributed Transaction Coordinator)服務。
3、打開雙方的135端口
MSDTC服務依賴於RPC(Remote Procedure Call (RPC))服務,RPC使用135端口,
保證RPC服務啓動,如果服務器有防火牆,保證135端口不被防火牆擋住。
使用“telnet IP 135”命令測試對方端口是否對外開放。也可用端口掃描軟件
(比如Advanced Port Scanner)掃描端口以判斷端口是否開放

4、--如要創建觸發器   
create   trigger   t_test   on   test   
for   insert,update,delete   
as 
--加上下面兩句,否則會提示新事務不能登記到指定事務處理器
set    xact_abort   on  
begin  distributed   tran 
 delete   from   openrowset('sqloledb','xz';'sa';'',test.dbo.test)   
 where   id   in(select   id   from   deleted)   
 insert   into   openrowset('sqloledb','xz';'sa';'',test.dbo.test)   
 select   *   from   inserted   
commit tran
--查詢示例 
select * from 鏈接服務器名.數據庫名.dbo.表名
--導入示例 
select * into 表 from 鏈接服務器名.數據庫名.dbo.表名
--以後不再使用時刪除鏈接服務器 
exec sp_dropserver  '鏈接服務器名 ', 'droplogins '
--**************************************************************************************
                --連接遠程/局域網數據(openrowset/openquery/opendatasource)
--**************************************************************************************
--1、openrowset
--查詢示例 
select * from openrowset( 'SQLOLEDB', 'sql服務器名'; '用戶名'; '密碼',數據庫名.dbo.表名)
--生成本地表 
select * into 表 from openrowset( 'SQLOLEDB', 'sql服務器名'; '用戶名'; '密碼',數據庫名.dbo.表名)
--把本地表導入遠程表 
insert openrowset( 'SQLOLEDB', 'sql服務器名'; '用戶名'; '密碼',數據庫名.dbo.表名) 
select *from 本地表
--更新本地表 
update b 
set b.列A=a.列A 
 from openrowset( 'SQLOLEDB', 'sql服務器名'; '用戶名'; '密碼',數據庫名.dbo.表名)as a
inner join 本地表 b 
on a.column1=b.column1
--2、openquery
--首先創建一個連接創建鏈接服務器
exec sp_addlinkedserver   '鏈接服務器名', ' ', 'SQLOLEDB', '遠程服務器名或ip地址' 
exec sp_addlinkedsrvlogin  '鏈接服務器名', 'false ',null, '用戶名', '密碼' 
--查詢 
select * FROM openquery(鏈接服務器名,  'SELECT *  FROM 數據庫.dbo.表名') 
--把本地表導入遠程表 
insert openquery(鏈接服務器名,  'SELECT *  FROM 數據庫.dbo.表名') 
select * from 本地表 
--更新本地表 
update b 
set b.列B=a.列B 
FROM openquery(鏈接服務器名,  'SELECT * FROM 數據庫.dbo.表名') as a  
inner join 本地表 b on a.列A=b.列A
--3、opendatasource
SELECT   * 
FROM   opendatasource
( 'SQLOLEDB',  'Data Source=ip/ServerName;User ID=登陸名;Password=密碼' ).test.dbo.表名
--把本地表導入遠程表 
insert opendatasource
( 'SQLOLEDB',  'Data Source=ip/ServerName;User ID=登陸名;Password=密碼').數據庫.dbo.表名 
select * from 本地表  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章