我有兩臺服務器上的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