我有一个database1
,它有超过500个表,我有database2
也有相同数量的表,并且在两个数据库中表的名称相同..一些表具有不同的表定义,例如reports
中的表database1
有9列,reports
中的表database2
有10列。
我想将所有数据从database1
复制到database2
,如果结构不匹配,它应该覆盖相同的数据并附加列。我在SQL Server 2008中尝试了导入导出向导,但在复制行的最后一步时出现错误。我现在没有关于该错误的屏幕截图,这是我的办公室电脑。它说错误插入只读列xyz
,有时它说vs_isbroken
,对于只读列错误,因为我提到了启用了身份插入,但它没有帮助..
请帮帮我。这对我来说是我办公室里的一个机会。
答案 0 :(得分:4)
SSIS和SQL Server 2008向导可能是挑剔的工具。
如果你得到一个"不能插入ABC"列,那么它可能是以下之一:
如果您的数据库使用此参与完整性,您也可能会遇到参照完整性问题。
如果您要更频繁地执行此操作,那么我建议您构建SSIS包而不是使用向导工具。通过这种方式,您可以看到各种问题的警告,例如我上面描述的问题。然后,您可以按需运行包。
我要做的另一个建议是,你将DB1插入" stage" DB2中的表。这些表应该没有关系完整性,并允许您将过程分解为以下几个步骤。
最后一步是您可以使用合并语句,或简单的插入/更新,具体取决于键匹配。然后,在本地数据库中使用SQL可以使用集合论来管理两个集合的重叠,并找出新的或要更新的内容。
SSIS"可以"这样做,但您将无法使用SSIS进行批量更新,而使用SQL则可以。 SSIS将执行所谓的RBAR(通过痛苦排行),缓慢而且要避免。
我建议您告知您的老年人,这需要更长时间才能确保其可靠且结果可报告。然后逐步完成工作,报告每个阶段的完成情况。
另外两个小建议:
基本分期(回答问题澄清):
链接:
分段是将数据从一个地方移动到另一个地方而无需任何检查的行为。
在数据流步骤之前,您可能希望添加一个将截断所有目标表的SQL步骤。
答案 1 :(得分:2)
如果您愿意使用工具,那么使用Red Gate Sql Compare和Red Gate SQL Data Compare之类的内容呢?
首先,我将使用数据比较来管理架构差异,从源(database1)向目标数据库(database2)添加所需的新列。然后使用数据比较,您可以根据您指定如何处理的名称匹配表中的内容。然后,您可以选择要从目的地复制的数据。因此,您将看到哪些数据是新的以及哪些数据不同(您可以删除目标中不在源中的数据或忽略它)。您可以让工具完成工作,也可以创建一个脚本,以便在需要时运行。
如果您想进行实验,可以进行为期15天的试用。
答案 2 :(得分:0)
似乎您正在寻找SQL Server Replication提供的复制技术。
答案 3 :(得分:0)
好吧,如果我理解你的要求,你需要让database2成为database1的副本。为什么不对database1进行完整备份并将其还原为database2?您的database2将是备份时database1的确切内容。