描述:有三台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的并集同步。望高手指点指点。

解决方案 »

  1.   

    两个服务器之间的之前已经搞定了,不过还是得谢谢楼上的兄弟。
    上午用另外一种方式测试了一下,实现是实现了,但不知道还有没有更好的办法。
    如下:
    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
    --希望有更好办法的朋友能共享一下。