描述:有三台SQL服务器(A、B、C),有相同的数据库D,并且每台服务器D数据库中有相同结构的表E(有主键)。
服务器B、C中的E表分别存储不同来源的数据(数据可能重复也可能不重复),现要求服务器A中E表定时接收(如1小时一次)
服务器B、C中E表的数据,并且合并(B、C服务器E表数据的瞬间并集)。
请问各位用SQL的发布与订阅能实现吗?或者有其它更好的办法?目前我能做到的是:A中的数据要么与B同步,要么与C同步,没办法做到与B、C的并集同步。望高手指点指点。
服务器B、C中的E表分别存储不同来源的数据(数据可能重复也可能不重复),现要求服务器A中E表定时接收(如1小时一次)
服务器B、C中E表的数据,并且合并(B、C服务器E表数据的瞬间并集)。
请问各位用SQL的发布与订阅能实现吗?或者有其它更好的办法?目前我能做到的是:A中的数据要么与B同步,要么与C同步,没办法做到与B、C的并集同步。望高手指点指点。
上午用另外一种方式测试了一下,实现是实现了,但不知道还有没有更好的办法。
如下:
1、在A服务器上数据库D上建立一个跨服务器的存储过程,用SQL代理定时执行,从B、C服务器上定时“拉”数据。CREATE PROCEDURE [dbo].[up_refresh]
AS
--创建远程链接
exec sp_addlinkedserver '别名','MS','SQLOLEDB','B服务器IP','','','数据库名'
--登录远程服务器
exec sp_addlinkedsrvlogin '别名','false',null,'用户名','密码'--以下从B服务器拉数据
--更新修改过的数据
update aa set 字段1=bb.字段1,字段2=bb.字段2,字段3=bb.字段3
from 别名.数据库名.dbo.E bb,E aa
where aa.主键=bb.主键 and
(aa.字段1<>bb.字段1 or aa.字段2<>bb.字段2 or aa.字段3<>bb.字段3)--插入新增的数据
--以下是根据条件自定义SQL插入语句(略)--删除已经删除的数据
--以下是根据条件自定义SQL删除语句(略)--删除登录信息
exec sp_droplinkedsrvlogin '别名',null
--删除连接服务器
exec sp_dropserver '别名',null--以下是C服务器处理,同上。
.......GO
--希望有更好办法的朋友能共享一下。