2015-09-16 94 views
0

我得到這個錯誤:不能具有唯一索引在對象中插入重複鍵行的重複鍵值的SQL Server

Cannot insert duplicate key row in object 'dbo.CLIENT' with unique index 'CLIENT_idx_A'. The duplicate key value is (14441828, 1).

當我檢查,各項指標,它的創建是這樣的:

CREATE UNIQUE NONCLUSTERED INDEX [CLIENT_idx_A] ON [dbo].[CLIENT] 
(
    [SOURCE_SYSTEM_CLIENT_ID] ASC, 
    [SOURCE_SYSTEM_ID] ASC 
) 
    WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
      SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, 
      DROP_EXISTING = OFF, ONLINE = OFF, 
      ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) 
ON [PRIMARY] 

其實,我想更新SOURCE_SYSTEM_CLIENT_ID中的一個值,而我的SOURCE_SYSTEM_ID對於我想要更新的所有SOURCE_SYSTEM_CLIENT_ID都是1。所以我認爲,它遇到了重複。我該如何解決這個問題?

+1

您遇到該錯誤,因爲您將導致2條記錄(338393005,1)。如果允許,您需要刪除該索引。這是解決方案。 –

+0

我是否需要刪除索引,運行更新查詢,然後再次創建索引?或者有什麼方法可以刪除索引? – AskMe

+0

您的數據庫被限制爲不允許每個系統有多個客戶端記錄。如果此規則不再有效且允許重複,則可以刪除索引,重新添加非唯一索引並運行更新。 – UnhandledExcepSean

回答

2

顯然(?)以下查詢將返回您的更新語句正在複製的行;

select * 
from [dbo].[CLIENT] 
where [SOURCE_SYSTEM_CLIENT_ID] = 338393005 
and [SOURCE_SYSTEM_ID] = 1 

你做些什麼來解決,這是你的,要麼存在的記錄是有效的,並要更新它的一些列,或者您也可以執行所產生的動作之前刪除衝突行原來的錯誤。

如果您不是故意重新開發架構,那麼刪除約束有點極端,這會讓您容易受到SQL和可能破壞數據的應用程序中的錯誤的影響。只有在你真正瞭解自己在做什麼以及想要達到的目標的情況下才可以在這裏展開。

+0

存在的記錄是有效的,我不想刪除它。我只想更新一些記錄和一些列。 – AskMe

+0

它是一個SQL語句,您執行哪個錯誤,或者您是否在嘗試將錯誤傳遞給您的應用程序中的更新?爲什麼你想改變現有記錄的[SOURCE_SYSTEM_CLIENT_ID],這是關係。您需要向您的問題添加更多信息,最好是更新聲明(如果可用)。 –

相關問題