我需要在两个数据库之间移动数据,并希望了解SSIS是否是一个好工具。我已将以下解决方案拼凑在一起,但它比我希望的要复杂得多 - 对于解决这个问题的更好方法的任何见解都将不胜感激!
那是什么让我的情况与众不同;我们拥有大量数据,因此为了保持系统性能,我们将客户分成多个数据库服务器。这些服务器具有相同模式的数据库,但每个数据库都填充有唯一数据。有时,我们需要将客户的数据从一台服务器移动到另一台服务器。因此,简单地重新创建表并将数据移动到位将不起作用,因为在服务器A上的数据库中可能有20条记录,但是在服务器B上的数据库的同一表中可能有30条记录。所以当将记录20从A移动到B,需要分配ID 31 。越过这一点并不困难,但是当需要移动具有外键引用的表时,麻烦就出现了,因为现在的记录就是31 ....
一个例子: 这是一个简单示例的示例模式:
有一个跟踪制造商的表格,以及一个跟踪每个参考制造商的产品的表格。
源数据库中的数据示例:
为了在保持关系完整性的同时处理这些数据,我采用了收集制造商记录,循环遍历它们以及移动相关产品的每个制造商的方法。以下是SSDT中控制流程的高级视图:
第一个数据流从源数据库中获取记录并将它们拉入Recordset Destination:
OLE DB Source在拉动所有列时从源数据库制造商表中提取,并将其放入记录集中:
回到控制流程中,然后我遍历制造商记录集中的记录:
对于制造商记录集中的每个记录,我然后执行一个SQL任务,该任务确定下一个可用的自动递增ID将在目标数据库中,插入记录,然后返回SELECT MAX(ManufacturerID)的结果执行SQL任务结果集,以便在将相关产品插入目标数据库时可以使用新创建的制造商ID:
上面的可以正常工作,但是一旦你获得了超过几层相互引用的表格,这就不再是非常稳固了。有一个更好的方法吗?
答案 0 :(得分:0)
您可以随时尝试:
这将保留您的FK约束,并且不要求您执行所有最大键选择。