共用方式為


MSSQL_ENG002601

訊息細節

產品名稱 SQL Server
事件識別碼 2601
事件來源 MSSQLSERVER
元件 SQL Server 資料庫引擎
符號名稱 N/A
消息正文 無法以唯一索引 '%.*ls' 在物件 '%.*ls' 中插入重複的索引鍵資料列。

說明

這是一般錯誤,不論資料庫是否復寫,都可以引發。 在複寫的資料庫中,錯誤通常發生是因為未能有效地在拓撲架構上管理主鍵。 在分散式環境中,必須確保同一個值不會被插入到多個節點的主鍵欄位或其他任何唯一欄位中。 可能的原因包括:

  • 數據列的插入和更新發生在多個節點上。 合併複寫和事務複製的可更新訂閱都提供衝突偵測和解決,但最好只在一個節點上插入或更新指定的資料列。 點對點交易系統不提供衝突偵測和解決;它要求插入和更新操作進行分區。

  • 在訂閱者端插入的數據列應該是唯讀的。 快照式發行集的訂閱者應被視為只讀;交易式發行集的訂閱者也應視為只讀,除非使用可更新的訂閱或點對點事務複製。

  • 正在使用具有識別欄的資料表,但該欄位未被管理不當。

  • 在合併式複寫中,在插入系統數據表時,也可能會發生此錯誤 MSmerge_contents;引發的錯誤類似於:無法在物件 'MSmerge_contents' 中插入具有唯一索引 'ucl1SycContents' 的重複索引鍵數據列。

使用者動作

所需的動作取決於引發錯誤的原因:

  • 數據列的插入和更新發生在多個節點上。

    不論使用的復寫類型為何,我們建議您盡可能分割插入和更新,因為這可減少衝突偵測和解決所需的處理。 對於點對點事務複製,需要分割插入和更新。 如需詳細資訊,請參閱 點對點事務複製

  • 在訂閱者端插入的數據列應該是唯讀的。

    除非您使用合併式復寫、具有可更新訂閱的事務複製,或點對點事務複製,否則請勿在訂閱者端插入或更新數據列。

  • 正在使用具有識別數據行的數據表,但數據行並未適當管理。

    對於合併複寫和具有可更新訂閱的交易式複寫,識別欄位應該由複寫自動管理。 如果是點對點事務複製,則必須手動管理它們。 如需詳細資訊,請參閱 複寫識別數據行

  • 錯誤會在插入系統數據表 MSmerge_contents期間發生。

    此錯誤可能是因為聯結篩選屬性的值不正確 join_unique_key。 只有當父數據表中的聯結數據行是唯一的,這個屬性才應該設定為 TRUE。 如果 屬性設定為 TRUE,但數據行不是唯一的,則會引發此錯誤。 如需設定此屬性的詳細資訊,請參閱 定義和修改合併發行項之間的聯結篩選

另請參閱

錯誤與事件參考 (複寫)