我正在将表迁移为新格式,并且作为该过程的一部分,我需要删除行并将其压缩为一行。但是,这些旧行正在被其他表引用。
是否有一种方法可以自动将引用旧行的外键的值更新为新创建的行的“ id”,或者这只能通过所有引用表手动进行?我正在使用数字(id)标识行。
唯一的其他可能方法是遍历每个引用表并使用多个子查询更新旧值,或者禁用外键检查然后删除旧行,但这不会更新子表中的值。
错误消息:SQL错误(1451):无法删除或更新父行: 外键约束失败...(我无法显示表名)
答案 0 :(得分:0)
我建议您先在旧ID和新ID之间创建一个映射,然后临时引入一个名为 NewId 的新字段,您将从该映射中填充该字段。接下来,一旦您填充了所有新ID,就可以简单地从新ID更新主要ID,然后完全删除 NewId 列。
当然,在开始任何键更新之前,您将需要禁用外键约束,请阅读this post有关如何进行的操作。