环境:
  有两台服务器A、B。
  都安装有SQL Server 2008数据库。
  有相同的数据库:TestDB(Tb1、Tb2、Tb3)
  两个服务器之间通过 发布(A)订阅(B) 实现数据的同步!
  B 服务器的 TestDB 数据库另外还有表 Tb1_Temp、Tb2_Temp、Tb3_Temp,3张Temp表的数据来源是对应表(Tb1、Tb2、Tb3),通过触发器实现。
  问题:
  1、发布订阅时,发布表和订阅表的结构是否可以不一致,如:订阅表比发布表多一个字段(用来标记是否触发)?
  2、因为 Tb1_Temp、Tb2_Temp、Tb3_Temp 三表的数据是相关联(发布服务器没有关联)的,如:通过 Tb_ID 字段关联,可以看成是主外键关系,主键表:Tb1_Temp;外键表:Tb2_Temp、Tb3_Temp 
     这样一条记录就必须先插入 Tb1_Temp,在插入 Tb2_Temp、Tb3_Temp。
     请问,如何控制这个触发的先后顺序呢???

解决方案 »

  1.   

    1、发布订阅时,发布表和订阅表的结构是否可以不一致,
    如:订阅表比发布表多一个字段(用来标记是否触发)?
    --> 可以不一樣,但需要修改一下訂閱端DB裡用來處理DML動作的存儲過程(共3個).2、因为 Tb1_Temp、Tb2_Temp、Tb3_Temp 三表的数据是相关联(发布服务器没有关联)的,
    如:通过 Tb_ID 字段关联,可以看成是主外键关系,主键表:Tb1_Temp;外键表:Tb2_Temp、Tb3_Temp  
      这样一条记录就必须先插入 Tb1_Temp,在插入 Tb2_Temp、Tb3_Temp。
      请问,如何控制这个触发的先后顺序呢???
    --> 3個表分別建3個複製, 同步的頻率錯開, 即tb1先同步, 過多幾分鐘再跑tb2,tb3的同步.
      

  2.   

    樓主的擔心的問題都是不存在,同步SQL自己處理這兩類情況,建議你自己動手測試
      

  3.   

      1、发布订阅时,发布表和订阅表的结构是否可以不一致,如:订阅表比发布表多一个字段(用来标记是否触发)?'
    可以
      2、因为 Tb1_Temp、Tb2_Temp、Tb3_Temp 三表的数据是相关联(发布服务器没有关联)的,如:通过 Tb_ID 字段关联,可以看成是主外键关系,主键表:Tb1_Temp;外键表:Tb2_Temp、Tb3_Temp  
      这样一条记录就必须先插入 Tb1_Temp,在插入 Tb2_Temp、Tb3_Temp。
      请问,如何控制这个触发的先后顺序呢???按照顺序来就行了
      

  4.   


    是这样的!每个表都有一个触发器,对应关系如下:
    Tb1--Tb1_Temp
    Tb2--Tb2_Temp
    Tb3--Tb3_Temp如果是手工输入Tb1、Tb2、Tb3的方式,那是很容易的,可以通过设置主外键来限制先输入Tb1,然后输入Tb2、Tb3!从而实现先插入Tb1_Temp表,再插入Tb2_Temp、Tb3_Temp表!
    但是现在Tb1、Tb2、Tb3的数据来源是订阅!我举个例子吧!
    Tb1  人员信息表(员工编号 --主键)
    Tb2  合同信息表(员工编号 --外键)
    Tb3  工作经历表(员工编号 --外键)我从原始服务器更新了三张表的数据,然后通过发布订阅更新到中间服务器,然后对中间服务器的表分别写触发器,再将数据插入到三张临时表(数据交换用),这三张临时表是有主外键关系!
    那么如果是新增操作,而且Tb2的数据先订阅到中间服务器,再通过触发器触发到临时表时就会出错了,因为主临时表没有对应的记录!
    请问会出现这样的现象吗?
      

  5.   

    有可能会出现这个问题,解决方法如2楼所述: 3個表分別建3個複製, 各自同步的頻率錯開, 即tb1先同步, 過多幾分鐘再跑tb2,tb3的同步.
      

  6.   

    实现同步 用Quartz.NET 
    参考
    http://www.cnblogs.com/shanyou/archive/2011/10/15/2213636.html