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

时间:2009-06-14 15:10:02

标签: sql-server replication

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

复制过滤器使得来自其中一个表(tblJobs)的行仅转到一个设备。在设备复制后,它执行sql以在其下载的所有记录上设置IsSynced布尔列,然后再次复制。

有什么方法可以避免第二次复制并在复制期间设置IsSynced布尔列? (也许首先下载,设置标志,然后上传?或者可能在发布者/分发者上设置复制过程标志?)。我不知道钩子在哪里用于此类事情。

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

2 个答案:

答案 0 :(得分:1)

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

当然,如果您想确保客户端具有最新版本的行,那么您需要在下表中挖掘代数:

MSmerge_replinfo
MSmerge_genhistory
MSmerge_contents
MSmerge_tombstone

每次更改数据时,合并复制都会通过为更改分配新的生成编号来跟踪此更改。然后,发布者保留一个世代号列表以及每个订户收到的世代。

只需在订阅者上批量更新行数据,就会强制将更改复制到发布者。

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

答案 1 :(得分:0)

不确定真正想要什么,但是如果您想要将通过复制从其他实例到达此处的来自此实例的记录分开,一种方法是在表格中添加Origin列,并将其默认为每台服务器上的唯一值。