分享方式:


MSSQL_ENG002627

適用於:SQL Server Azure SQL 受控執行個體

訊息詳細數據

屬性
產品名稱 SQL Server
事件識別碼 2627
事件來源 MSSQLSERVER
元件 SQL Server Database Engine
符號名稱 N/A
訊息文字 違反 %ls 條件約束 '%.*ls'。 無法在物件 '%.*ls' 中插入重複的索引鍵。

說明

這是一般錯誤,不論資料庫是否復寫,都可以引發。 在復寫的資料庫中,通常會引發錯誤,因為主鍵尚未在拓撲上適當地管理。 在分散式環境中,請務必確保相同的值不會插入主鍵數據行或任何其他唯一數據行的多個節點。 可能的原因包括:

  • 數據列的插入和更新發生在多個節點上。 事務複製的合併式複寫和可更新訂閱都提供衝突偵測和解決,但最好只在一個節點上插入或更新指定的數據列。 點對點交易不會提供衝突偵測和解決;它需要分割插入和更新。

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

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

使用者動作

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

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

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

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

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

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

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

另請參閱

錯誤與事件參考 (複寫)
合併式複寫
@loopback_detection
Updatable Subscriptions for Transactional Replication