MSSQL_ENG002627

訊息詳細資料

產品名稱

SQL Server

產品版本

10.50

產品組建編號

 

事件識別碼

2627

事件來源

MSSQLSERVER

元件

SQL Server Database Engine

符號名稱

N/A

訊息文字

違反 %ls 條件約束 '%.*ls'。無法在物件 '%.*ls' 中插入重複的索引鍵。

說明

這是不論複寫資料庫與否,都有可能發生的一般性錯誤。在複寫資料庫中,通常是因為主要索引鍵未於拓撲之間適當管理,才會發生這個錯誤。在散發環境中,務必確認主要索引鍵資料行或其他唯一資料行中,並未於多個節點插入相同的值。可能的原因包括:

  • 同時在多個節點發生資料列的插入與更新動作。合併式複寫與交易式複寫的可更新訂閱,皆提供衝突偵測和解決方案,但最好還是在單一節點插入或更新給定資料列。點對點交易不提供衝突偵測和解決方案;必須先分割插入與更新。

  • 插入訂閱者的資料列應該是唯讀的。快照集發行集的訂閱者應設定唯讀,交易式發行集的訂閱者亦同;除非已使用可更新訂閱或點對點交易式複寫。

  • 已使用具有識別欄位的資料表,但並未適當管理資料行。

使用者動作

必須依照錯誤產生的原因採取動作:

  • 同時在多個節點發生資料列的插入與更新動作。

    不論使用哪一種複寫類型,建議您隨時分割插入和更新;因為這樣可以減少衝突偵測與解決方案所需的處理。點對點交易式複寫需要分割插入和更新。如需詳細資訊,請參閱<點對點交易式複寫>。

  • 插入訂閱者的資料列應該是唯讀的。

    請勿於訂閱者插入或更新資料列,除非您使用合併式複寫、有可更新訂閱的交易式複寫或點對點交易式複寫。

  • 已使用具有識別欄位的資料表,但並未適當管理資料行。

    針對合併式複寫以及有可更新訂閱的交易式複寫,應由複寫來自動管理識別欄位。點對點交易式複寫必須手動管理。如需詳細資訊,請參閱<複寫識別欄位>。