合并来自多个MS SQL Server数据库的数据到一个

问题描述:

我期待找到以下问题与微软SQL Server的一个简单的解决方案:合并来自多个MS SQL Server数据库的数据到一个

  • 我有一组数据库,这些都是建立与完全相同的架构
  • 它们都含有不相交的数据集

的我现在想所有这些独立DBS在一个单一的一个组合。所以基本上是一个愚蠢的复制&粘贴。然而,我现在想到了一个难题,即我必须保持外键关系完好,尽管所有的主键都会改变。

所以我对此一个问题是:

  • 是我要考虑有没有其他问题?
  • 是否有一些工具可以执行这个简单的任务,或者我必须编写自己的工具/脚本?

非常感谢你, 亚历

+0

另一个可能值得考虑的选择是,不要破坏当前存在的任何东西,就是保持现有的混乱结构,并简单地创建一个SQL查询数据来查询。这条路线有轻微的表现,但比实际移动的数据风险要小得多。 – user2366842

选项1:脚本是SQL

内如果你把它们放在同一个SQL Server上,你可以写一个跨数据库查询可以拉所有的数据库和插入行到一个很容易,但正如你所说,由于像外键的担心可能会变得复杂。

选项2:使用SQL集成服务

保持在SQL的解决方案可能意味着使用类似的SSIS,构建了一个迁移过程,但是这将复杂的快无疑让你与更好只是自己创建一个脚本。

方法3:使用代码坐在DB的顶部和ORM

如果DB模式是足够复杂的,你可以考虑使用基于代码的方法,并建立在数据库之上的ORM模型。

这将有一个额外的好处,即从一个副本到另一个副本可以完成“一次一个实体树”,从本质上允许您保持事物之间的关系,而无需保留原始ID,因为数据移动时可能会发生与其他数据库中使用的相同ID冲突。

方案4:出口=>进口

导出DAT afrom源数据库,然后导入到目标DB,我相信SQL服务器具有这种类型的事情向导,可能能够处理整个数据库的操作,我有一个有趣的感觉,尽管最后一次我尝试了这一点,但它只适用于一次简单的平面设置。

我将如何解决这个

个人...我的“最快解决方案”将是ORM方法,主要是因为我是一名开发人员,并且拥有C#和Entity Framework的强大技能,我将用它来实现这一点。

您可能更

如果你是在心脏一个DBA虽然你可能更适合于“写一个迁移脚本自己在SQL办法”(asusming你可以把数据库的一台服务器上)。

最简单的方法是与合并数据库的额外SYSTEM_ID场(添加到所有表)值1 - 服务器之一,2 - 服务器的两个...

所有外国键添加这个领域SYSTEM_ID和所有的唯一键(也是PK),现在你可以从两个系统插入数据(在insert中将system_id设置为1或2),不需要创建新的主键(并且替换子表中的值)。 而且在所有的选择和连接中,你也必须使用这个新的system_id字段(所以原始选择不会不改变它)。

困难的方法(用于迁移,但最容易选择)是添加所有表的system_id字段和PK_original字段。在这种情况下,您必须将原始PK插入PK_original字段(并且您将拥有一个带有标识的新PK字段),并且在任何子表中,对于每个子值,您必须将原始PK值替换为新创建的迁移一。 但另一方面,您从原始数据库中选择的所有内容都将运行,而无需更改任何内容。