我想每个人都会不时遇到这个问题:您有两个表,这些表的自动编号主键需要合并。有很多很好的理由说明为什么使用自动编号主键来支持应用程序生成的键,但是与其他表合并必须是最大的缺点之一。

出现的一些问题是id重叠和外键不同步。我想听听您解决这个问题的方法。我总是遇到问题,所以我很好奇是否有人有某种通用的解决方案。

-编辑-

针对建议使用guid或其他非数字键的答案,在某些情况下,预先使用自动编号键似乎是一个更好的主意(稍后您会后悔),或者您正在接管其他人的项目,或获得一些必须使用的旧数据库。因此,我确实正在寻找一种解决方案,在该解决方案中您将无法再控制数据库设计。

最佳答案

嗯,我对AlexKuznetsov的答案发表评论很热衷,所以我将对此做一个完整的答案。

考虑将表命名为table1和table2,并将表id1和id2作为自动编号主键。它们将与id3(非自动编号主键)合并到table3中。

为什么不:

  • 删除对table1和table2的所有外键约束
  • 对于引用table1的所有外键字段,执行UPDATE table SET id1 = id1 * 2,对于引用table2的FK字段,执行UPDATE table SET id2 = (id2) * 2 + 1
  • 通过执行INSERT INTO table3 SELECT id1 * 2 AS id3, ... FROM table1 UNION ALL SELECT id2 * 2 + 1 AS id3 FROM table2
  • 填充table3
  • 为table3新建新的外键约束

  • 它甚至可以通过使用更高的乘法器来处理3个或更多表。

    关于sql-server - 如何合并具有自动编号主键的表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3824639/

    10-10 00:35