您好,感谢阅读,也许还有帮助
我的问题的简要说明:
我正在将数据从一个Firebird-Database复制到另一个(称为V14),我正在使用IBExpert这样做。 这些表名称相同,具有相同的结构。为了解释我要调用包含旧数据库A中的数据的表,并且我想要将数据插入的表应该被称为B.
所以唯一要做的就是从表A中获取所有数据并将它们插入表B. 这样做的一小部分代码是:
INSERT into [V14].BSMZ SELECT * FROM BSMZ
执行此操作我收到错误消息(在转移了一些行之后):
无效的插入或更新值:对象列受约束 - 没有2个表行可以具有重复的列值。尝试在唯一索引“UI_BSMZ”中存储重复值(对活动事务可见)
此唯一索引包含2个数据列,适用于表B和A.
有多行导致此问题,但也会根据需要传输多行。 我已经证实,无法插入到表B中的行在其唯一键列中具有值,这些行在表B中不存在。
(为了测试的目的,我确实删除了表B中的约束。但我仍然得到相同的错误消息,这让我更加困惑)
我不确定是什么原因造成了这个问题,并希望得到一些提示。
答案 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;
重建你的索引