訊息細節
| 產品名稱 | SQL Server |
| 事件識別碼 | 2627 |
| 事件來源 | MSSQLSERVER |
| 元件 | SQL Server 資料庫引擎 |
| 符號名稱 | N/A |
| 消息正文 | 違反 %ls 條件約束 '%.*ls'。 無法在物件 '%.*ls' 中插入重複的索引鍵。 |
說明
這是一般錯誤,不論資料庫是否復寫,都可以引發。 在複製的資料庫中,通常會發生錯誤,這是因為主鍵在拓撲結構中沒有得到適當的管理。 在分散式環境中,務必確保同樣的值不會插入於主鍵欄位或任何其他唯一欄位的多個節點上。 可能的原因包括:
數據列的插入和更新發生在多個節點上。 事務複製中的合併複製和可更新的訂閱都提供衝突偵測和解決,但最好只在一個節點上插入或更新某一列。 點對點事務性不會提供衝突偵測和解決;它需要將插入和更新進行劃分。
在訂閱者端插入的數據列應該是唯讀的。 快照式發行集的訂閱者應該被視為唯讀,而交易式發行集的訂閱者亦然,除非使用可更新的訂閱或點對點事務複製。
正在使用具有身份欄的資料表,但該欄未妥善管理。
使用者動作
所需的動作取決於引發錯誤的原因:
數據列的插入和更新發生在多個節點上。
無論使用何種復寫類型,我們建議您在可能的情況下分割插入及更新,這樣可以減少衝突偵測和解決所需的處理量。 對於點對點事務複製,需要分割插入和更新。 如需詳細資訊,請參閱 點對點事務複製。
在訂閱者端插入的數據列應該是唯讀的。
除非您使用合併式復寫、具有可更新訂閱的事務複製,或點對點事務複製,否則請勿在訂閱者端插入或更新數據列。
正在使用中的資料表有一個識別欄位,但該欄位未被適當管理。
對於具有可更新訂閱的合併複寫和交易複寫,識別欄位應該由複寫自動管理。 如果是點對點事務複製,則必須手動管理它們。 如需詳細資訊,請參閱 複寫識別數據行。