我有两台服务器上的SQL Server合并复制设置,并且在同步运行时出现密钥约束错误。我可以解决此问题的唯一方法是删除其中一台服务器上的记录,然后运行同步。合并复制唯一密钥约束
问题:有没有办法配置复制或解析器,以便发布者记录获胜,并且在遇到唯一或主键冲突时自动删除订阅者记录?
样品表:
CREATE TABLE [dbo].[tblPeople](
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[col1] [int] NULL,
[col2] [int] NULL,
[col3] [int] NULL,
[name] [varchar](52) NULL
CONSTRAINT [UK_keys] UNIQUE NONCLUSTERED
(
[col1] ASC,
[col2] ASC,
[col3] ASC
)
插入服务器1
INSERT into tblPeople (col1, col2, col3, name) values (1, 1, 1, 'Server 1 Insert')
插入在服务器2
INSERT into tblPeople (col1, col2, col3, name) values (1, 1, 1, 'Server 2 Insert')
触发同步,这导致在该冲突错误和两个服务器具有其这个记录的自己的版本。
'SERVER1.TestDb'处的行插入无法传播到'SERVER2.TestDb'。这种失败可能是由违反约束条件造成的。违反唯一键约束'UK_keys'。无法在对象'dbo.tblPeople'中插入重复键。重复的键值是(1,1,1)。
我读到的关于此的一切建议添加一个唯一的GUID或使用标识列,这不是解决此问题的方法。身份范围工作得很好,我甚至可以创建自己的rowguid,但这仍然不能解决约束违规问题,因为我最终需要手动删除记录。
这个人问了一个类似的问题,但我需要在指导和身份顶部的唯一键。 Automatically resolve primary key merge conflict
链接已经死了。现在可在https://msdn.microsoft.com/en-us/library/ms153258.aspx上找到 – wes