根据条件控制SSIS包中的流量

时间:2012-12-21 17:59:33

标签: ssis conditional control-flow

是否有办法有条件地(通过脚本任务或其他任何方式)控制SSIS中的程序流程?

目前我有一个包可以动态创建5个不同的Excel工作表(通过执行SQL任务)。有时可能所有5个都有数据或只有1个可能有数据。当它只有1有数据时,它很好。但是,当有5个DFT尝试将数据同时写入同一工作簿时(尽管其中有不同的工作表),真正的问题就出现了。包失败并出现OLEDB错误。

经过大量的突破后,我终于发现这是一个并发控制问题,不允许我同时写入excel文件。为了进一步解决这个问题,我在优先约束上使用了表达式来控制是否创建了工作表。 但真正的麻烦在于,在创建工作表之后,包将无法同时将数据写入2个不同的工作表。

有没有办法,我可以为DFT分配'执行订单'?这就是我寻找脚本任务的原因,这样当特定工作表的计数为0时,它就不起作用,控制移动到另一个分支。

我希望我没有在这里困惑你。但如果我有,我很乐意提供有关这个问题的更多细节。谢谢你的阅读。

1 个答案:

答案 0 :(得分:6)

我的第一个想法是拥有一堆序列容器,每个可能的Excel工作表一个,每个包含三个任务:

  1. 一个脚本任务,用于确定是否创建工作表,并相应地设置布尔包变量
  2. 用于创建工作表的SQL任务
  3. 填充工作表的数据流任务
  4. 任务1和2之间的优先约束是布尔值为true的表达式:

    screenshot of precedence constraint editor showing expression of @DoNorthRegion

    任务2和3之间的优先约束将是成功约束,序列容器之间的优先约束也是如此。总的来说,它看起来像这样:

    screenshot of four sequence containers, one expanded to show contents