复制 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 数据库并修复外键的主要内容,如果未能解决你的问题,请参考以下文章