0

我有关于合并复制的问题。我有一个表设置我在哪里存储我的软件的设置。 表格的架构是ID(PK),Description,Value。 假设我的服务器上有15行这个表。 现在我已经在这个表上应用了过滤器,表示只有前10行将被复制。SQL合并复制问题

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

一个行插入不能 传播到“MyServer.ServerDatabaseName”。这种故障可能是由违反约束条件造成的 。违反PRIMARY KEY约束条件 'PK_SETTINGS'。无法在对象'dbo.SETTINGS'中插入重复键。 重复的键值是(11)。

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

这种情况不适用于合并复制吗?

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

+0

请在合并文章上分享过滤器定义。 – Greg

+0

这是条件“SETTINGS.ID <10” – Saurabh

+0

是一个标识列?用户上插入了什么值?如果您设置了身份范围,则需要进行不同的过滤。 – Greg

回答

1

为合并项目创建的过滤器仅在发布者处进行评估。用户所做的更改将始终传播回用户,即使他们超出了筛选条件。但是,如果来自一个订阅者的更改不符合过滤标准,则他们将坐在发布者身上,但不会被复制到所有其他订阅者。

这是一个生产方案,或者是你玩弄复制?如果您进行静态过滤,这就是您上面的过滤,它通常在只读类型的表上完成。例如,现场的销售人员可能只需要他们地区的产品价格。他们不希望更新此表。如果您进行动态过滤,例如,基于HOSTNAME()进行过滤,那么您只会获取该用户的特定数据。例如,现场的销售人员只会收到他们的客户信息。因此,除非在多个销售人员之间共享,否则对该信息的任何更新都会传播回去,而不会传播给其他任何人。

在你的情况,我不建议在具有静态过滤器的用户更新表,因此,我建议重新评估你的过滤设计,确保你有你的情况下正确的过滤模型。

+0

那么你在我的场景中建议什么?我可以通过使用动态过滤器来实现吗?如果是的话如何? – Saurabh

+0

有没有办法阻止用户向发布者发送某些行?我从你的回复中了解到,订阅者所做的任何更改都将始终传播给发布者,即使它超出了过滤条件。 – Saurabh

+0

您可以防止用户被复制回来的所有更改,但不能选择性地进行复制。听起来你需要设计审查,这是不能在论坛上完成的,最好在当地咨询专家。 – Greg