代码之家  ›  专栏  ›  技术社区  ›  Christopher Edwards

SQL合并复制:如何判断记录是否已复制

  •  1
  • Christopher Edwards  · 技术社区  · 15 年前

    我有一个合并复制方案,其中SQL2005 SP3作为发布服务器和分发服务器,Windows Mobile SQLCE 3.5 SP1作为订阅服务器。

    复制筛选器使得其中一个表(tbljobs)中的行只能转到一个设备。在设备复制之后,它执行SQL来设置它下载的所有记录的IsSynced布尔列,然后再次复制。

    是否有任何方法可以避免第二次复制,并在复制过程中设置IsSynced布尔列??(可能先下载,设置标志,然后上传?或者让发布服务器/分发服务器上的复制过程设置标志?)我不知道这种东西的钩子在哪里。

    值得一提的是,表中有一个rowversion字段。

    2 回复  |  直到 15 年前
        1
  •  1
  •   rein    15 年前

    判断记录是否已复制的最简单方法是检查msmerge_contents表。如果该表中存在该行,则该行以前已被复制。

    当然,如果您希望确保客户机具有该行的最新版本,那么您需要在下表中对生成号进行一些挖掘:

    MSmerge_replinfo
    MSmerge_genhistory
    MSmerge_contents
    MSmerge_tombstone
    

    每次更改数据时,合并复制通过分配新的 一代 更改的编号。然后,发布服务器保存一个生成编号列表以及每个订阅服务器接收到的生成。

    只需对订阅服务器上的行数据进行批更新,就会强制将更改复制到发布服务器。

    不幸的是,我不知道更新该列的简单方法,除非您首先不复制该列——也就是说,使用垂直(列)分区排除它。

        2
  •  0
  •   Andriy Volkov    15 年前

    不知道你在干什么 真的? 想要,但是如果您想区分那些在这个实例上产生的记录和通过复制从其他实例到达这里的记录,一种方法是 Origin 表中的列,并将其默认为每个服务器上的唯一值。