SSIS - ForEach循环遍历多个表

时间:2016-07-21 12:01:05

标签: sql sql-server ssis

问题是:我有3张桌子。第一个表基本上是一个帐号列表。第二个表包含公司内的部门列表,最后一个表包含枚举的建筑物位置(工厂)列表。 SSIS中的数据源是设置的(OLEDB),每个数据源从它们各自的表(plant,dept和acctnum,所有这些都是varchar类型)中拉入列中的每个记录。我在SSIS中创建了变量(对象类型),并为3个表拉动中的每一个分配了结果集。行变量也已设置并分配。

我的目标是:对于每个帐号,我需要创建一个由'plant'+'dept'+'acctnum'组成的唯一“代码”,并将此连接结果插入到单独的表中。每个帐号都需要以这种方式与每个工厂以及每个部门组合在一起。

因此,插入的样本记录可能看起来像'081350015'(前2位是植物,接下来2位是dept,剩下5位是acctnum)。下一个插入的记录将使用相同的帐号与从dept表和从工厂表中选择的下一个工厂记录中选择的下一个dept记录的结果相结合。基本上,每个帐号都会获得部门/工厂的每个组合。

示例:

  • AcctNumber表中的第一条记录:'50001'(AcctNumber tbl中总共约300行)
  • 植物表中的第一条记录:'01'(植物表中的15行)
  • Dept表中的第一条记录:'22'(Dept表中有50行)
  • 现在,构建插入单独表格的代码 - > '01'+'22'+'50001' - >插入'01225001'
  • 仍在使用AcctNumber表中的第一条记录:'50001'
  • 仍在使用部门表中的第一条记录:'22'
  • 现在,转到工厂表中的第二条记录:'41'
  • 构建插入单独表格的代码 - > '41'+'22'+'50001' - >插入
  • 仍在使用AcctNumber表中的第一条记录:'50001'
  • 仍在使用部门表中的第一条记录:'22'
  • 现在,转到工厂表中的第三条记录:'18'
  • 构建插入单独表格的代码 - > '18'+ '22'+ 50001' - >插入

遵循此流程,直到AcctNum / Dept组合('22'+'50001')与Plant表返回的每个工厂记录组合。

现在,仍然使用从AcctNum表('50001')返回的第一条记录,我们使用从Dept表('62')返回的NEXT记录,并迭代回到Plant表格返回的第一条记录(' 01')导致'01'+'62'+'50001'插入单独的表中。因此,对于返回的每个Dept记录,它将与给定唯一AcctNumber的每个工厂记录组合。

我知道这可能令人困惑(或许不是)。如果我需要进一步解释,请告诉我。

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。通过一次执行2表并将每个表的结果存储在临时表中,然后将这些表交叉连接到它们共有的列上,结束交叉连接3个表。感谢您的评论。