我希望找到一个针对Microsoft SQL Server的以下问题的简单解决方案:
我现在想将所有这些单独的DB组合在一起。所以基本上是一个愚蠢的副本&糊。 但是,我目前想到了一个难点,即我必须保持外键关系不变,尽管所有主键都会改变。
所以关于这个问题的问题是:
非常感谢, 亚历
答案 0 :(得分:4)
选项1:在SQL中编写脚本
如果你把它们放在同一个sql服务器上,你可以编写一个跨数据库查询,它可以从所有数据库中提取并轻松地将行插入到一个中,但正如你所说,由于外键等问题可能会变得复杂。 / p>
选项2:使用SQL集成服务
将解决方案保存在SQL中可能意味着使用类似SSIS的东西并构建迁移过程,但毫无疑问,这会很复杂,所以你最好自己构建一个脚本。
选项3:使用位于数据库顶部的代码和ORM
如果db模型足够复杂,您可以考虑使用基于代码的方法并在db之上构建ORM模型。
这将具有额外的优势,即从一个到另一个的副本可以完成“一次一个实体树”,基本上允许您保持事物之间的关系,而不保留原始id,就像数据移动它时可能与其他数据库中使用的相同ID冲突。
选项4:导出=>进口强>
从源数据库导出数据然后导入到目标数据库,我相信SQL服务器有一个这种类型的向导,所以可能能够为整个数据库执行此操作,我有一个有趣的感觉虽然我上次尝试这个时,它确实只适用于一次放入一张桌子的简单平面。
我将如何解决此问题
个人......我的“最快解决方案”将是ORM方法,主要是因为我是一名开发人员,并且拥有C#和Entity Framework的强大技能,我会用它来做到这一点。
您可能更喜欢
如果您是DBA,尽管您可能更适合“在SQL方法中自己编写迁移脚本”(asusming,您可以将db放在1台服务器上)。
答案 1 :(得分:0)
最简单的方法在合并数据库中添加额外的system_id字段(添加到所有表)值1服务器1,服务器2服务器......
对所有外键添加此system_id字段和所有唯一键(也是PK),现在您可以从两个系统插入数据(在insert中将system_id设置为1或2),无需创建新的主键(并替换子表中的值)。 在所有选择和连接中,您也必须使用这个新的system_id字段(因此原始选择在不更改的情况下将无法工作)。
困难(对于迁移,但最简单的选择)是添加system_id字段和PK_original字段的所有表。在这种情况下,您必须将原始PK插入PK_original字段(并且您将拥有一个带有标识的新PK字段),并且在任何子表中,对于每个子值,您必须将原始PK值替换为新创建的迁移一。 但另一方面,您从原始数据库中选择的所有内容都将无需更改任何内容即可运行。