gpt4 book ai didi

sql-server - SQL Server 如何合并两个数据库?

转载 作者:太空狗 更新时间:2023-10-30 01:45:24 25 4
gpt4 key购买 nike

两个数据库具有相同的模式,但它们可能会与某些表中的主键发生冲突。所以我希望他们忽略重复的行,并继续进一步合并。

最佳答案

首先,键冲突表明您当前使用的任何进程都不好。

要正确合并两个使用自动生成(非 GUID)键的数据库,您需要采取几个步骤。首先向父表添加一个新的自动生成的键,然后从两个表中导入所有数据,将旧的旧文件重命名为 ID_old 并将新文件重命名为旧的 id 名称。此时您可以继续处理子表。您需要通过连接到父表并将新的 id 字段作为外键的值而不是现有表中的值来复制到子表。您将需要对每个外键表重复此过程,如果该表也是父表,则需要在复制任何数据之前将 conversionid 字段添加到表中,以便您可以一直沿着链向下工作.要正确地做到这一点,需要大量的数据库结构知识和大量的计划。如果没有对两个源数据库进行良好备份,请不要考虑执行此操作。最好在两个数据库都处于单用户模式时进行该过程。

如果您使用自然键并且有重复键,您的问题就会大不相同。首先将所有重复的关键记录移动到单独的表中,然后确定哪个数据更正确。在某些情况下,您会发现自然键实际上不是唯一的(它们很少是唯一的,这就是我几乎从不使用它们的原因)并且合并的数据库将需要使用某种类型的自动生成的键。这将涉及代码更改以及数据库更改,因此这是不得已的选择。

您经常发现自然键的数据不同但相似(地址中的 St. vice Street),在这种情况下,标记其中一条记录进行插入,然后分两步插入,首先是没有重复的记录,然后是重复表中标记为插入的记录。请记住,您将必须检查所有外键表中的所有记录,以确定保留哪些和不保留哪些。只是扔掉任何重复项不是一个好主意,那样您将丢失数据,可能是关键数据(例如客户的订单)。这是一个漫长而乏味的过程,需要具有数据专业知识的人来做出决定。作为程序员,您应该为他们提供一个重复数据删除工具,让他们检查每组重复项的所有数据,并选择要保留的内容和删除的内容,然后标记所有内容,它将运行一个过程来插入记录.请记住,在您的设计中,对于真正的重复项,将有一些子表(例如 orders )需要将两者的记录发送到数据库,以便选择作为要输入的记录(例如 orders ),对于其他表您将要选择正确的(例如地址)。所以你可以看出这是一个复杂的过程,需要对数据库有透彻的了解。

如果你有很多重复,他们可能会清理和添加几个月的数据,所以一个工具真的很关键。执行此操作的人很可能是系统用户,而不是数据库专家或程序员,因为他们是唯一真正可以在大部分时间就保留哪条记录做出判断的人。在任何情况下,您都可能需要做一些类似的事情,因为即使您拥有自动生成的 key ,也可能存在重复的记录。它们只是更难找到。

没有简单的方法来合并两个数据库(即使使用 GUIDS,您也会遇到自然键重复的问题)。

关于sql-server - SQL Server 如何合并两个数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/909541/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com