2012-07-24 70 views
1

我有2个ssis包,它使用相同的查询(对package1和package2的查询有细微的差别),并给出2个提取sample1.csv和sample2.csv如何重复使用同一套代码的2个包

而不是使用两个包,我希望只使用单一封装到平行取提取物对于这种情况。

通过运行sinle的工作,我希望每次提取sample1.csv和sample2.csv。

在我的两个包,我已经使用在执行SQL任务临时表,所以在数据流任务,我已经采取了脚本组件来获得的列名和数据。

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

Package2 output extract

图像显示一个查询结果我已经在包1中。图2显示了我在package2中使用的查询结果。

+0

因此,我正确理解您要导入sample1.csv和sample2.csv,并使用一个包进行此导入? – Josien 2012-07-24 08:54:36

+0

是的,但我不想保留两个DFT的package1和另一个package2。 – user1348424 2012-07-24 09:33:14

回答

0

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

  1. 在SQL Server中创建表(“运行”)含有ID栏,查询列和目的列
  2. 创建每“运行”的一个记录(即每现有封装) ,在查询栏中不同的查询
  3. 创建一个执行SQL任务父包查询运行表,返回所有要求的查询和输出放到一个对象变量
  4. 添加为每个枚举循环通过返回的记录,将Query列映射到Query变量,将Destination列映射到Destination变量
  5. 在每个枚举器的内部,添加执行包任务,指向您现有的“子”包
  6. 在子包中,添加另一个查询变量并设置包配置以获取父级的查询变量。对目的地执行相同操作
  7. 修改您的子包中的数据源以使用变量中的sql命令并将其指向查询变量
  8. 修改Child包目标中使用的文件管理器以使用构建使用目标变量的文件路径/名称

请注意,只有每个查询返回具有相同数据类型和数据长度的完全相同数量的列时,它才起作用。如果没有,你会得到各种元数据错误。

以上这可以在通过在SQL Server数据库中创建一个存储过程或用户定义的函数,以集中的查询,并只储存在运行表粒状参数加以改进。