如何将表与自动编号主键合并?

Car*_*lis 7 sql-server database-design identity-column

我想每个人偶尔遇到这个问题:你有两个表有自动编号需要合并的主键.使用自动编号主键有利于说应用程序生成的密钥有很多很好的理由,但与其他表合并必然是最大的缺点之一.

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

- 编辑 -

在回答建议使用guid或其他非数字键的答案时,有些情况事先提醒使用自动编号键(后来你后悔),或者你正在接管其他人的项目,或者你得到一些你必须使用的遗留数据库.所以我真的在找一个你无法控制数据库设计的解决方案.

tho*_*ulb 3

嗯,我对我刚刚在 AlexKuznetsov 的答案中发表评论的想法很感兴趣,所以我将对此做出完整的回答。

假设表被命名为 table1 和 table2,其中 id1 和 id2 作为自动编号主键。它们将被合并到带有 id3(非自动编号主键)的 table3 中。

为什么不:

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

它甚至可以与 3 个或更多表配合使用,只需使用更高的乘数即可。