SQL合并复制问题

时间:2015-11-06 06:34:07

标签: c# sql-server sql-server-2008 replication merge-replication

我遇到了有关合并复制的问题。我有一个表设置在哪里存储我的软件的设置。 表的模式是ID(PK),描述,值。 假设我服务器上的这个表中有15行。 现在我已在此表上应用过滤器,只说前10行会复制。

现在我第一次同步这个设置时,我收到了客户端上的10行(有订阅)。 然后我在我的客户端添加剩余的5。 现在,当我再次同步时,它给了我一个冲突说

  

'ClientServer.ClientDatabaseName'中的行插入不可能   传播到'MyServer.ServerDatabaseName'。这种失败可以   由约束违规引起的。违反PRIMARY KEY约束   'PK_SETTINGS'。无法在对象'dbo.SETTINGS'中插入重复键。   重复键值为(11)。

我不明白为什么它试图复制在该表上应用的子集过滤器之外的某些东西(行)?请帮帮我们。

Merge复制无法实现这种情况吗?

https://msdn.microsoft.com/en-us/library/ms151775.aspx链接表明这是可能的。但困惑。

1 个答案:

答案 0 :(得分:1)

仅为发布商评估为合并文章创建的过滤器。在订户处进行的更改将始终传播回订户,即使它们超出过滤条件。但是,如果来自一个订户的更改不符合过滤条件,那么它们将位于发布者上,但不会复制到所有其他订阅者。

这是一个制作场景,还是你正在玩复制?如果您执行上面的静态过滤,则通常在只读类型的表上完成。例如,该领域的销售人员可能只需要其所在地区的产品价格。他们不会更新此表。如果您进行动态过滤,例如,基于HOSTNAME()进行过滤,那么您将只获得特定于该用户的数据。例如,现场的销售人员只会收到他们的客户信息。因此,除非在多个销售人员之间共享,否则对该信息的任何更新都会传播回来,而不会流向其他任何人。

在您的情况下,我不建议更新订阅者上有静态过滤器的表格,因此我建议您重新评估过滤设计,以确保您的场景拥有正确的过滤模型。