Sql server 合并复制唯一密钥约束

Sql server 合并复制唯一密钥约束,sql-server,replication,merge-replication,Sql Server,Replication,Merge Replication,我在两台服务器上安装了SQL Server合并复制,并且在同步运行时出现密钥约束错误。解决此问题的唯一方法是删除其中一台服务器上的记录,然后运行同步 问题:是否有办法配置复制或冲突解决程序,以便在遇到唯一密钥或主键冲突时发布者记录获胜,订阅者记录自动删除 样本表: CREATE TABLE [dbo].[tblPeople]( [ID] [bigint] IDENTITY(1,1) NOT NULL, [col1] [int] NULL, [col2] [int] NULL, [

我在两台服务器上安装了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_密钥”。无法在对象“dbo.tblPeople”中插入重复键。重复的键值是(1,1,1)

关于这一点,我读到的所有内容都建议添加一个唯一的guid或使用标识列,但这并不能解决这个问题。标识范围工作得很好,我甚至可以创建自己的rowguid,但这仍然不能解决我最终需要手动删除记录的约束冲突问题

此人问了一个类似的问题,但我需要guid和标识上方的唯一键。

通过在合并文章中将补偿错误设置为true,可以解决此问题。默认情况下,当发生约束错误时,SQL Server不会触发解析器。不能通过用户界面更改此设置,必须使用t-sql进行更新

exec sp_changemergearticle @publication = 'PublicationName' 
, @article = 'TableName'
, @property = 'compensate_for_errors'
, @value = N'true'
, @force_invalidate_snapshot = true 
, @force_reinit_subscription = true

链接已断开。现于