将多个 MS SQL Server 数据库中的数据合并为一个

3
我希望能为您提供有关 Microsoft SQL Server 的简单解决方案:
  • 我有一组数据库,它们都具有完全相同的模式
  • 它们包含不相交的数据集

现在,我想将所有这些独立的数据库合并成一个。因此,基本上是愚蠢地复制和粘贴。 但是,我目前考虑到一个困难,即我必须保持外键关系完好无损,尽管所有主键都将更改。

所以,我的问题是:

  • 我是否需要考虑其他问题?
  • 是否有工具可以执行此简单任务,还是我必须编写自己的工具/脚本?

非常感谢, Alex


另一个值得考虑的选项是保持现有混乱的结构,仅创建数据的 SQL view 以进行查询,以避免破坏当前存在的任何内容。这种方法会稍微影响性能,但比实际移动数据要少得多的风险。 - user2366842
2个回答

4
选项1:在SQL中编写脚本
如果您将它们放在同一台SQL服务器上,您可以编写一个跨数据库查询,从所有数据库中提取并轻松插入行,但是正如您所说的那样,由于外键等问题可能会变得复杂。
选项2:使用SQL Integration Services
将解决方案保留在SQL中可能意味着使用类似SSIS的东西并构建迁移过程,但毫无疑问这将变得非常复杂,因此您最好自己编写脚本。
选项3:使用DB顶部的代码和ORM
如果数据库模型足够复杂,则可以考虑使用基于代码的方法,并在数据库上构建ORM模型。
这将有一个额外的优点,即可以“一次只复制一个实体树”,从而允许您保持事物之间的关系,而无需保留原始ID,因为当数据移动时,它很可能与其他数据库中使用的相同ID发生冲突。
选项4:导出=>导入
从源数据库导出数据,然后将其导入目标数据库,我相信SQL Server具有此类操作的向导,因此可以处理对整个数据库的这种操作。不过,我有一种奇怪的感觉,即最后一次尝试这样做时,它只能适用于逐个表逐个简单平面集的情况。
我的解决方法
个人而言...我会选择ORM方法作为最快的解决方案,主要是因为我是一名开发人员,并且熟练掌握C#和Entity Framework。
您可能更喜欢
如果您本质上是一位数据库管理员,则可能更适合“在SQL中自己编写迁移脚本”的方法(假设您可以将数据库放在1个服务器上)。

0

最简单的方法是在合并的数据库中添加一个额外的system_id字段(添加到所有表中),值为1-服务器一,2-服务器二...

对于所有外键,都要添加这个system_id字段以及所有唯一键(包括PK),现在您可以从两个系统中插入数据(在插入时将system_id设置为1或2),无需创建新的主键(并替换子表中的值)。 在所有选择和连接中,您也必须使用这个新的system_id字段(所以原始选择不会在不改变它的情况下工作)。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接