Firebird2.5错误:“唯一索引中的重复值”没有重复数据

时间:2014-02-19 12:21:59

标签: sql database sql-insert firebird2.5 ibexpert

您好,感谢阅读,也许还有帮助

我的问题的简要说明:

我正在将数据从一个Firebird-Database复制到另一个(称为V14),我正在使用IBExpert这样做。 这些表名称相同,具有相同的结构。为了解释我要调用包含旧数据库A中的数据的表,并且我想要将数据插入的表应该被称为B.

所以唯一要做的就是从表A中获取所有数据并将它们插入表B. 这样做的一小部分代码是:

INSERT into [V14].BSMZ SELECT * FROM BSMZ

执行此操作我收到错误消息(在转移了一些行之后):

无效的插入或更新值:对象列受约束 - 没有2个表行可以具有重复的列值。尝试在唯一索引“UI_BSMZ”中存储重复值(对活动事务可见)

此唯一索引包含2个数据列,适用于表B和A.

有多行导致此问题,但也会根据需要传输多行。 我已经证实,无法插入到表B中的行在其唯一键列中具有值,这些行在表B中不存在。

(为了测试的目的,我确实删除了表B中的约束。但我仍然得到相同的错误消息,这让我更加困惑)

我不确定是什么原因造成了这个问题,并希望得到一些提示。

1 个答案:

答案 0 :(得分:1)

你有完全错误信息唯一索引“UI_BSMZ” 找到这个唯一约束的声明 - 它不是关于从B到A的外键 这是某些字段表中的约束[s]

在源数据库中运行来自此UK 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)

如果此查询返回某些行 - 而不是源数据库索引已损坏 - 或不存在

修复索引(删除重复项后) - 运行:

Alter Index INDEX_NAME ACTIVE;

重建你的索引