SQL 合并复制问题

SQL Merge Replication Issue

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

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

A row insert at 'ClientServer.ClientDatabaseName' could not be propagated to 'MyServer.ServerDatabaseName'. This failure can be caused by a constraint violation. Violation of PRIMARY KEY constraint 'PK_SETTINGS'. Cannot insert duplicate key in object 'dbo.SETTINGS'. The duplicate key value is (11).

我不明白的是为什么它试图复制在 table 上应用的子集过滤器之外的东西(行)?请大家帮忙。

合并复制不可能出现这种情况吗?

https://msdn.microsoft.com/en-us/library/ms151775.aspx link 表明这是可能的。却迷茫。

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

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

对于您的情况,我不建议在具有静态过滤器的订阅者上更新 tables,因此我建议重新评估您的过滤设计以确保您拥有适合您的方案的正确过滤模型。