Sql 合并具有冲突键的两个版本的数据库表

Sql 合并具有冲突键的两个版本的数据库表,sql,ms-access,Sql,Ms Access,我被要求合并2个Access数据库。它们是同一文件的冲突版本 数据库已通过电子邮件发送给某人。(我知道。)有人在“主”副本中添加了记录,而有人在其副本中添加了记录。我想在完全销毁所有其他副本之前,将“未经授权”副本中的新记录添加到主版本中 不幸的是,数据库有几个相关的表。正如添加记录时自然发生的那样,不同版本的记录具有冲突的主键。这些冲突的密钥也用作新记录中的外键。在这两个版本中,对IDX的外键引用表示不同的含义 还有希望吗?我想把它全部导入excel,用公式更新主键和外键 有没有办法通过编程解

我被要求合并2个Access数据库。它们是同一文件的冲突版本

数据库已通过电子邮件发送给某人。(我知道。)有人在“主”副本中添加了记录,而有人在其副本中添加了记录。我想在完全销毁所有其他副本之前,将“未经授权”副本中的新记录添加到主版本中

不幸的是,数据库有几个相关的表。正如添加记录时自然发生的那样,不同版本的记录具有冲突的主键。这些冲突的密钥也用作新记录中的外键。在这两个版本中,对IDX的外键引用表示不同的含义

还有希望吗?我想把它全部导入excel,用公式更新主键和外键

有没有办法通过编程解决这个问题

编辑:这是一张显示完整关系的图片。表
教师
测试
,和
测试结果
已更改;其他人在这两方面都是一样的。

有没有办法通过编程解决这个问题

不,这必须由能够阅读和理解数据并做出决策的人来完成

创建一个表1和表2之间具有内部联接的查询,另一个表1和表2之间具有外部联接的查询,以及另一个表2和表1之间具有外部联接的查询


现在,您可以研究这些差异,并决定要保留的类似记录的哪个版本,以及哪些记录是全新的,应该保留—有些记录具有新的主键。

在主数据库中,向需要向其中添加数据的每个表中添加名为[oldID]的
字段。然后创建指向“其他”数据库中相关表的链接表。由于表名相同,链接表将附加一个“1”

对于这个例子,我们有

[教师]
老师
--  --------  -----
1教师a
2教师B
3教师
[教师1]
身份证教师
--  --------
1教师a
2教师B
3教师
[测试]
ID测试\名教师oldID
--  --------------  -------  -----
1教师A_测试1 1
2教师测试2 1
3教师B_测试1 2
4教师考试1 3
[测试1]
考名教师
--  --------------  -------
1教师A_测试1 1
2教师测试2 1
3教师B_测试1 2
4教师测试1 3
5教师测试2 3
记下表格的分歧之处。在这种情况下,[teachers]表在ID=2后发散。因此,将新行从[teachers1]插入[teachers],将[teachers1].[ID]放入[teachers].[oldID],这样我们就可以将旧ID映射到新ID:

插入到[教师]([教师],[旧ID])
从[teachers1]中选择[teacher],[ID],其中[ID]>2
现在我们有了

[教师]
老师
--  --------  -----
1教师a
2教师B
3教师
4教师3
现在,当我们将[tests1]中的新行追加到[tests]中时,我们可以使用[teachers].[oldID]上的内部联接来调整插入的外键值:

插入到[tests]([test_name]、[teacher]、[oldID])
选择[tests1].[test_name],[teachers].[ID],[tests1].[ID]
从[tests1]上的[tests1]内部联接[teachers]。[teacher]=[teachers]。[oldID]
给我们

[测试]
ID测试\名教师oldID
--  --------------  -------  -----
1教师A_测试1 1
2教师测试2 1
3教师B_测试1 2
4教师考试1 3
5教师考试1 4 4
6教师考试2 4 5
请注意,[teacher]外键如何从[tests1]中的值
3
映射到[tests]中的值
4
,反映了“TeacherY”的新[teachers].[ID]值

然后可以对[tests]的子表重复该过程


(清理完成后,您可以删除表链接并删除[oldID]列。)

合并数据库?mdb/accdb文件实际上是许多对象的容器,包括表/查询/表单/报表/宏/模块。你的意思可能是在两个Access文件的表之间添加数据?而且,在it方面,如果没有细节,这太宽泛了。答案是肯定的,可以在不同的访问数据库中进行迁移。您可以将所有数据导入临时表,并运行各种查询以映射最终表导入的键,但没有看到数据或架构,我们无法提供进一步帮助。您可以使用类似于中“场景2:两个表之间的公共ID值”的方法。@Parfait有3个表需要追加。这很简单,只是新记录在这两个字段中具有相同的数字ID键。不能仅仅更改键,因为表2和表3引用了表1中的记录。@GordThompson谢谢。不幸的是,我还有其他表引用了这些ID!:(我正要用
oldID
方法回答!OP可能需要清理
oldID
与要合并的每个数据库,因为相同的ID可能会冲突。