sql-server – 如何在SQL Server中合并两个数据库?
两个数据库都具有相同的模式,但在某些表中它们可能会遇到与主键的冲突.所以我希望他们只是忽略重复的行,并继续进一步合并.
解决方法首先,密钥冲突表明您当前使用的任何流程都很差.要正确合并使用自动生成(non_GUID)键的两个数据库,您需要执行几个步骤.首先将新的自动生成的密钥添加到父表,然后从两个表中导入所有数据,将旧的文件重命名为ID_old,并将新文件重命名为旧的ID名称.此时,您可以移动子表.您需要通过连接到父表并将新的id字段作为外键的值而不是现有表中的值来复制到子表.您需要为每个外键表重复此过程,如果该表也是父表,则需要在复制任何数据之前将conversionid字段添加到表中,以便您可以在链中一直工作.要做到这一点,需要掌握大量关于数据库结构和大量规划的知识.如果没有两个源数据库的良好备份,请不要考虑这样做.当两个数据库都处于单用户模式时,最好能够进行此过程. 如果您使用自然键并具有重复项,则会遇到很大的问题.所有重复的密钥记录都应首先移动到一个单独的表中,并确定应该制作哪个更正确的数据.在某些情况下,您会发现自然键实际上并不是唯一的(它们很少就是我几乎不使用它们的原因)并且合并的数据库需要使用某种类型的自动生成的键.这将涉及代码更改以及数据库更改,因此它是最后的选择. 您经常使用自然键找到的是每个数据的数据不同但是simliar(地址中的St. vice Street)在这种情况下标记插入的记录之一,然后在两个步骤中插入时,首先记录没有重复项,然后重复项表中标记为插入的记录.请记住,您必须检查所有外键表中的所有记录,以确定要保留哪些记录以及哪些记录不保留.抛弃任何重复项是一个坏主意,你会丢失数据,可能是关键数据(如客户的订单).这是一个漫长而乏味的过程,需要具有数据专业知识的人才能做出决定.作为程序员,您应该为他们提供一个重复数据删除工具,让他们检查每组重复项的所有数据,并选择要保留的内容和删除的内容,然后标记每个重复项,它将运行一个过程来插入记录.记住你的设计,对于真正的重复,会有一些子表(如订单)需要发送到数据库的记录选择作为输入的记录(订单是一个例子),对于其他表你会想要选择哪个是正确的(例如地址).因此,您可以看到这是一个复杂的过程,需要彻底了解数据库. 如果您有很多重复项,他们可能会清理并添加数据数月,因此工具非常重要.这样做的人很可能是系统用户,而不是数据库专家或程序员,因为他们是唯一真正可以判断保留哪条记录的人.可能你需要在任何情况下做一些类似的事情,因为即使你有一个自动生成的密钥,也可能有重复的记录.它们更难找到. 没有简单的方法来合并两个数据库(即使使用GUIDS,您也会遇到自然键中重复的问题). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- MySql中表单输入数据出现中文乱码的解决方法
- SQL SERVER 2000 9003错误的解决方法(只适用于SQL2000)
- sqlserver 禁用触发器和启用触发器的语句
- sql-server – 使用OpenRowSet导入.CSV文件时,将科学符号转
- oracle忘记sys/system/scott用户密码的解决方法
- 搜索 – 使用参数使用Like操作符在SQL查询中避免SQL注入?
- sql-server – 使用SQL SMO修复孤立用户?
- sql-server – 如何在索引重组期间防止事务日志变满?
- SQLServer之删除索引
- sql-server – 在正在生产的数据库上使用SQL事件探查器