如何为2个包重用相同的代码集

时间:2012-07-24 07:05:13

标签: ssis

我有2个ssis包使用相同的查询(在package1和package2的查询中有细微差别)并提供2个提取 sample1.csv和sample2.csv

我不想使用两个软件包,而是只想使用单个软件包来为此方案并行获取提取。

通过运行sinle job,我想一次提取sample1.csv和sample2.csv。

在我的两个包中,我在执行sql任务中使用了临时表,因此在数据流任务中我已经使用脚本组件来获取列名和数据。

我附加了示例查询结果输出Package1 output extract

Package2 output extract

图像1显示了我在package1中使用的查询结果。图2显示了我在package2中使用的查询结果。

1 个答案:

答案 0 :(得分:0)

我有类似的情况。解决方案如下:

  1. 在SQL Server中创建一个包含ID列,Query列和Destination列的表(“Run”)
  2. 为每个“运行”(即每个现有包)创建一条记录,并在“查询”列中使用不同的查询
  3. 使用执行SQL任务创建父包以查询运行表,返回所有必需的查询并将输出放入对象变量
  4. 为每个枚举器添加一个循环返回的记录,将Query列映射到Query变量,将Destination列映射到Destination变量
  5. 在每个枚举器中,添加一个执行包任务,指向现有的“子”包
  6. 在子包中,添加另一个Query变量并设置包配置以获取Parent的查询变量。对目的地
  7. 执行相同操作
  8. 修改子包中的数据源以使用变量中的sql命令并将其指向Query变量
  9. 修改子包目标中使用的文件管理器,以使用使用目标变量构建文件路径/名称的表达式
  10. 注意,只有每个查询返回具有相同数据类型和数据长度的完全相同数量的列时,此方法才有效。如果没有,您将收到各种元数据错误。

    通过在SQL Server数据库中创建存储过程或用户定义的函数来集中查询,并将粒度参数存储在Run表中,可以改进上述内容。