1

我有 2 个 ssis 包,它们使用相同的查询(对 package1 和 package2 的查询略有不同),并给出了 2 个提取sample1.csv 和 sample2.csv

我不想使用两个包,而是只想使用单个包来并行获取这种情况下的提取。

通过运行单一作业,我想一次提取 sample1.csv 和 sample2.csv。

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

我附上了示例查询结果输出Package1 输出提取

Package2 输出提取

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

4

1 回答 1

0

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

  1. 在 SQL Server 中创建一个表(“运行”),其中包含一个 ID 列、一个查询列和一个目标列
  2. 每次“运行”(即每个现有包)创建一条记录,在 Query 列中使用不同的查询
  3. 使用 Execute SQL Task 创建父包以查询 Run 表,返回所有必需的查询并将输出放入对象变量中
  4. 为每个枚举器添加一个循环遍历返回的记录,将 Query 列映射到 Query 变量,将 Destination 列映射到 Destination 变量
  5. 在 for each 枚举器中,添加一个执行包任务,指向您现有的“子”包
  6. 在子包中,添加另一个 Query 变量并设置包配置以获取 Parent 的 Query 变量。对目的地做同样的事情
  7. 修改子包中的数据源以使用来自变量的 sql 命令并将其指向 Query 变量
  8. 修改子包目标中使用的文件管理器,以使用使用目标变量构建文件路径/名称的表达式

请注意,这仅适用于每个查询返回完全相同数量的具有相同数据类型和数据长度的列。如果没有,您将收到各种元数据错误。

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

于 2012-07-25T14:59:30.537 回答