复制 SQL 数据库并修复外键

Posted

技术标签:

【中文标题】复制 SQL 数据库并修复外键【英文标题】:Copying SQL database and fixing foreign keys 【发布时间】:2013-12-24 08:19:36 【问题描述】:

我正在制作一个优化路线的应用程序(有点像 VRP)。用户必须能够复制所有输入数据,并对这些数据进行更改。通过这种方式,他们能够找出对优化的影响。

因此我选择让他们能够复制所有输入数据,并且有点像数据的版本管理。

我要复制以下表格:

一桌

ID     UUID     WEIGHT     CODE     
1      abc        15        AB
2      abd        5         AC

表二

ID     UUID      SIZE      TABLE1_FK
1      abe        1           1
2      abf        3           2

结果表(复制后):

一桌

ID     UUID     WEIGHT     CODE     
1      abc        15        AB
2      abd        5         AC
3      abg        15        AB
4      abh        5         AC

表二

ID     UUID      SIZE      TABLE1_FK
1      abe        1           1
2      abf        3           2
3      abi        1           1
4      abj        3           2

到目前为止,我可以做到。但是现在当我想更新 TableTwo 的外键以指向 TableOne 中复制的行时,我卡住了。

我想做这样的事情:

UPDATE TableOne 
SET TABLE1_FK = 
(SELECT t.ID 
 FROM TableOne t 
 WHERE t.WEIGHT = (SELECT t.WEIGHT 
                   FROM TableOne t1 
                   WHERE ...)
)

这就是我卡住的地方。 想要的结果是:

表二

ID     UUID      SIZE      TABLE1_FK
1      abe        1           1
2      abf        3           2
3      abi        1           3
4      abj        3           4

有什么建议吗?

【问题讨论】:

【参考方案1】:

在第一个表中插入后,选择它的@@IDENTITY 并使用它来插入 在第二个表中作为外键。

【讨论】:

这对我不起作用,因为我一次复制了一个表的数据:INSERT INTO TableOne (UUID, WEIGHT, CODE) SELECT NEWID(), t.WEIGHT, t.CODE FROM TableOne t 和@@IDENTITY 返回最后插入的标识:“如果插入多行,生成多个标识值,@@IDENTITY 返回最后生成的标识值。” 看看这个,你可以解决这个问题,为 ids ***.com/questions/8982934/… 保留另一个表

以上是关于复制 SQL 数据库并修复外键的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 MySQL 中的外键错误?

SQL 使用新的外键复制数据

运行迁移时如何修复外键错误

如何使用外键连接两个数据集以创建新数据集?

如何在 Azure 数据工厂中为与外键相关的表创建管道并执行复制活动?

我应该使用外键吗? [复制]