首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

两个sql 服务器上的数据相互传输

2013-09-06 
两个sql 服务器上的数据互相传输现在需要两个sql 服务器上的数据互相传输、写的是存错过程建立作业让其自动

两个sql 服务器上的数据互相传输
现在需要两个sql 服务器上的数据互相传输、写的是存错过程建立作业让其自动执行、在执行的过程中如何用sql 判断两个服务器网络是否通呢?   sql 服务器 数据 网络
[解决办法]
这个要建链接服务器:

exec sp_addlinkedserver   'DB32',   '   ',   'SQLOLEDB',   '192.168.3.x\SQLEXPRESS2008R2'   
exec sp_addlinkedsrvlogin 'DB32',   'false',null,   'sa',   'xxxxxxx'   

--查询
select   *   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   
>exec sp_addlinkedserver @server=’别名’,@provider=’sqloledb’,@srvproduct=’’,@datasrc=’远程服务器IP’ 




远程注册成功:(亲测) 

--exec sp_addlinkedserver '注册名','','SQLOLEDB','远程数据库名' 
--exec sp_addlinkedsrvlogin '注册名','false',null,'用户名','密码' 


--go 

[解决办法]

--打开高级选项,允许即席查询
EXEC SP_CONFIGURE 'show advanced options',1  
RECONFIGURE  
EXEC SP_CONFIGURE 'Ad Hoc Distributed Queries',1  
RECONFIGURE
GO

DECLARE @test INT

SELECT TOP(1) @test = 1
FROM OPENDATASOURCE
(
'SQLOLEDB',
'Persist Security Info=False;User ID=xx;Password=xxxxx;Initial Catalog=master;Data Source=127.0.0.1,1433'
).master.dbo.spt_values T

--关闭选项
EXEC SP_CONFIGURE 'Ad Hoc Distributed Queries',0
RECONFIGURE
EXEC SP_CONFIGURE 'show advanced options',0  
RECONFIGURE

IF (@test = 1)
PRINT 'sucess!'
ELSE
PRINT 'failed'
GO

[解决办法]
用linkserver, 


[解决办法]
引用:
传输应该问题、假如两个网络不通、 执行传输的时候会报错的、我是想在互相传输之前、就是像用ping网路似得、判断下网络、如果网络通就传、如果网络不通、那个数据传输的代码就不执行了。。  

好像没什么直接的方法。把测试代码放在TRY...CATCH...中,将通或不通的结果值赋给变量。再往下判断:
DECLARE @test INT

BEGIN TRY
EXEC SP_CONFIGURE 'show advanced options',1  
RECONFIGURE  
EXEC SP_CONFIGURE 'Ad Hoc Distributed Queries',1  
RECONFIGURE

SELECT TOP(1) @test = 1
FROM OPENDATASOURCE
(
'SQLOLEDB',
'Persist Security Info=False;User ID=xx;Password=xxxxx;Initial Catalog=master;Data Source=127.0.0.1,1433'
).master.dbo.spt_values T
 
--关闭选项
EXEC SP_CONFIGURE 'Ad Hoc Distributed Queries',0
RECONFIGURE
EXEC SP_CONFIGURE 'show advanced options',0  
RECONFIGURE
END TRY
begin CATCH
SET @test = 0
--关闭选项
EXEC SP_CONFIGURE 'Ad Hoc Distributed Queries',0
RECONFIGURE
EXEC SP_CONFIGURE 'show advanced options',0  
RECONFIGURE
END CATCH

IF (@test = 1)
    PRINT 'sucess!'
ELSE
    PRINT 'failed'


GO


热点排行
Bad Request.