MSSQL_ENG002601
適用於:SQL Server
Azure SQL 受控執行個體
訊息詳細數據
屬性 | 值 |
---|---|
產品名稱 | SQL Server |
事件識別碼 | 2601 |
事件來源 | MSSQLSERVER |
元件 | SQL Server Database Engine |
符號名稱 | N/A |
訊息文字 | 無法以唯一索引 '%.*ls' 在物件 '%.*ls' 中插入重複的索引鍵資料列。 |
說明
這是一般錯誤,不論資料庫是否復寫,都可以引發。 在復寫的資料庫中,通常會引發錯誤,因為主鍵尚未在拓撲上適當地管理。 在分散式環境中,請務必確保相同的值不會插入主鍵數據行或任何其他唯一數據行的多個節點。 可能的原因包括:
數據列的插入和更新發生在多個節點上。 事務複製的合併式複寫和可更新訂閱都提供衝突偵測和解決,但最好只在一個節點上插入或更新指定的數據列。 點對點交易不會提供衝突偵測和解決;它需要分割插入和更新。
在訂閱者端插入的數據列應該是唯讀的。 快照式發行集的訂閱者應該被視為只讀,除非使用可更新的訂閱或點對點事務複製,否則交易式發行集的訂閱者應該視為唯讀。
正在使用具有識別數據行的數據表,但數據行並未適當管理。
在合併式複寫中,這個錯誤也可以在插入系統數據表 MSmerge_contents期間發生;引發的錯誤類似於:無法在物件 'MSmerge_contents' 中插入具有唯一索引 'ucl1SycContents' 的重複索引鍵數據列。
使用者動作
所需的動作取決於引發錯誤的原因:
數據列的插入和更新發生在多個節點上。
不論使用的復寫類型為何,我們建議您盡可能分割插入和更新,因為這可減少衝突偵測和解決所需的處理。 對於點對點事務複製,需要分割插入和更新。 如需相關資訊,請參閱 Peer-to-Peer Transactional Replication。
在訂閱者端插入的數據列應該是唯讀的。
除非您使用合併式復寫、具有可更新訂閱的事務複製,或點對點事務複製,否則請勿在訂閱者端插入或更新數據列。
正在使用具有識別數據行的數據表,但數據行並未適當管理。
對於具有可更新訂閱的合併式複寫和事務複製,識別數據行應該由複寫自動管理。 如果是點對點事務複製,則必須手動管理它們。 如需詳細資訊,請參閱複寫識別資料欄。
錯誤會在插入系統數據表 MSmerge_contents期間發生。
此錯誤可能是因為聯結篩選屬性 的值不正確,join_unique_key。 只有當父數據表中的聯結數據行是唯一的,這個屬性才應該設定為 TRUE。 如果 屬性設定為 TRUE,但數據行不是唯一的,則會引發此錯誤。 如需設定此屬性的詳細資訊,請參閱 定義和修改合併發行項之間的聯結篩選。