基本SSIS层次结构移动

时间:2015-08-11 14:13:26

标签: sql-server ssis database-migration

我有一个关系数据库,我想将一个分层数据的子集从一个数据库复制到另一个数据库。我已经找到了很多关于移动或复制具有各种变换的单个表的信息,但在基本的分层移动方面却没有太多信息。

关于在SSIS中执行此操作,我有三个问题。

  1. uniqueidentifier ID会使这项工作比自动递增的整数ID更容易吗?
  2. 如何在SSIS中复制基本的父/子?
  3. 如何复制更复杂的Parent / Child / Parent2?
  4. 问题1:Uniqueidentifier ID

    一个solution to a question about moving data描述了创建聪明的登台表以创建新ID。这使我认为SQL UniqueID优于整数自动增量ID,因为可以简单地设置“保持身份”而不会出现冲突问题。这是真的吗?

    问题2:移动基本层次结构

    这是我的数据库的简化模式(Parent< -Child):

    OptimizationSets<-AllocationLimits
    
    Assets<-AllocationLimits
    
    Assets<-Returns
    

    我想从OptimizationSets表中选择一些行来从一个数据库复制到另一个数据库。另外,我想在AllocationLimits中复制相应的子行。我可以使用OLE DB源轻松选择所需的父行,但选择子行似乎并不明显。 lookup函数只返回一个子行而不是所有子行。

    问题3:复杂关系

    除了AllocationLimits中的选定行之外,我还想复制Assets中的相关父行以及相关的返回。

1 个答案:

答案 0 :(得分:0)

这不是一个完整的答案,但可以使用合并连接和查找块来完成分层移动。需要对某些数据流进行排序,这可以通过块或排序块中的SQL语句来完成。

这里有一点流程(对不起,因为我是新手而无法发布图片):

  • OptimizationSets source - &gt;多播1
  • 组播1 - &gt; OptimizationsSets destination
  • 组播1 - &gt; MergeJoin 1
  • AllocationLimits source - &gt; MergeJoin 1
  • MergeJoin 1 - &gt;多播2
  • 组播2 - &gt; AllocationLimits目的地
  • 组播2 - &gt;排序 - &gt;查询资产
  • 查找资产 - &gt;多播3
  • 组播3 - &gt;资产目的地
  • 组播3 - &gt; MergeJoin 3
  • 返回来源 - &gt; MergeJoin 3
  • MergeJoin 3 - &gt;返回目的地

遗漏了一些细节,例如源上的一些SQL WHERE和ORDER BY子句,但一般流程非常简单。通过MergeJoin和Lookup块可以完成孩子和父母的学习。