2014-02-19 53 views
3

您好,感謝您的閱讀,可能還幫我Firebird2.5錯誤:「在唯一索引中的重複值」不重複數據

我的問題的簡要說明:

我從一個Firebird-複製數據數據庫到另一個(稱爲V14),我正在使用IBExpert來做到這一點。 這些表格命名相同,並具有相同的結構。爲了解釋我要打電話給包含舊數據庫A中的數據的表格,並且我想要插入數據的表格將被稱爲B.

因此唯一要做的就是將所有數據從表A和將它們插入到表B. 的小塊代碼的這樣做是:

INSERT into [V14].BSMZ SELECT * FROM BSMZ 

執行該收到錯誤-消息(一些行被轉移後):

無效插入或更新值(s):對象列受到約束 - 沒有2個錶行可以具有重複的列值。嘗試存儲在唯一索引「UI_BSMZ」

重複值(可見的活躍交易)這種獨特的指數包含2個數據colums和適用於表B和A

有導致此問題的多行而且還根據需要轉移多行。 我已經證實,無法插入到表B中的行在它們的unique-key-colums中具有值,這些值不在表B中存在。

(爲了測試的目的,我沒有刪除約束從表B。但我仍然得到相同的錯誤消息,這使我更加困惑)

我不知道什麼可能會導致此問題,並會感激一些提示。

+0

在它可能與備份的唯一約束腐敗指數出現的一些情況。還要檢查其中一個受約束的列中是否有空值。 –

+0

受約束的柱中沒有空值。也許我應該問谷歌如何修復損壞的索引,並看看如果這能解決問題... – user3327902

+0

另一件事:約束包括(var)char列嗎?如果是這樣,它可能是一個不區分大小寫和/或不區分變音的列? –

回答

1

你得到確切信息時出錯唯一索引「UI_BSMZ」 找到唯一性約束的這一聲明 - 這是不是從B到A 外鍵,這是在表約束在某些領域[S]

源從這個英國UI_BSMZ

SELECT UK_FIELD_1, UK_FIELD_2, .. FROM TABLE_NAME GROUP BY UK_FIELD_1, UK_FIELD_2, .. HAVING  COUNT(*)>1 PLAN (TABLE_NAME NATURAL) 

領域數據庫運行查詢,如果該查詢返回的某些行 - 比在源數據庫索引已損壞 - 或不存在

修復指數(deletin後摹重複) - 這條命令:

Alter Index INDEX_NAME ACTIVE; 

這個重建索引

相關問題