出于某种原因,当从xml将大量数据插入到多个表中时,我的主键被移位了偏移..(可能是因为多次尝试失败:P)
我有两个表.. tableA和tableB。他们是一对一的关系。 tableA是父表,并且具有主键列...比如DataIndex。
现在DataIndex就像这样......
685,686,687 ......等等。
和子表中存在的相应值,即TableB是相同的。
如何将值向上移动,以便DataIndex从1,2,3开始......依此类推;在两个表中?
答案 0 :(得分:1)
我假设主键实际上是一个标识列,在插入时会自动递增。您需要做的是“重新设置”标识列。您可以通过重命名表,使用原始名称创建重复表,然后将旧表中的数据插入新表(主键字段将被重置并将再次从1自动递增)来完成此操作。在进行插入时,请确保将旧的主键值作为附加列包含在其他表中以供参考。
要匹配相关表格,您只需执行UPDATE
并使用旧主键值加入新表:
UPDATE tableB SET
PRIMARYKEYCOLUMN = tableA.PRIMARYKEYCOLUMN
FROM tableA
WHERE
tableA.OLDPRIMARYKEYCOLUMN = tableB.PRIMARYKEYCOLUMN
答案 1 :(得分:0)
更改种子可能涉及标识列删除和重新创建。
答案 2 :(得分:0)
我会做以下事情:
ALTER
所有FK,添加ON UPDATE CASCADE
子句。此步骤可能对某些数据库不起作用,您可能需要再次DROP
和CREATE
约束; SELECT min(id) FROM tableA;
UPDATE tableA SET id = id - min_id + 1;
ON UPDATE CASCADE
子句。请注意,根据tableA
大小和您正在使用的数据库引擎,完全重建表可能更快更容易,以避免数据文件膨胀。