基于条件控制SSIS包中的流程

3
有没有办法通过条件(通过脚本任务或其他方式)在SSIS中控制程序的流程?
目前,我有一个包将通过Execute SQL Task动态创建5个不同的Excel表。有时可能全部5个表都有数据,也可能只有1个表有数据。当只有1个表有数据时,一切正常,但当5个DFT尝试同时写入相同工作簿中的数据时(虽然位于不同的表内),该包会出现OLEDB错误。
经过许多头脑风暴,我终于发现这是并发控制问题,它不允许我同时向Excel文件中写入数据。为了进一步解决问题,我在优先约束上使用表达式来控制是否创建表格。但真正的问题是,在创建表格后,该包会在尝试同时向2个不同的表中写入数据时失败。
有没有办法为DFT分配“执行顺序”?这就是我寻找脚本任务的原因,以便在特定表的计数为0时,它不进行任何操作,并且控制移动到另一个分支。
希望我没有让您困惑。但如果我有,我很乐意提供更多关于此问题的详细信息。谢谢阅读。

在SSIS中有一个完整的文档部分关于控制流,包括教程示例。这是否回答了你的问题? - Pondlife
我怀疑那里面对我没有什么用。我已经尝试过变量和优先约束了,但效果不佳。根据从表中返回的计数,我需要控制哪个数据流转换先执行,哪个后执行,以此类推。 - rvphx
这里只是在思考,如果您将所有任务序列化,然后在当前的优先级约束逻辑中使用它来启用/禁用任务,会怎样呢?如果您想看到它的图片形式,我可以将其制作成答案。这应该可以消除并发挑战。 - billinkc
当然可以。任何有帮助的东西都非常感激。 - rvphx
1个回答

7

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

  1. 一个脚本任务来确定是否创建工作表,并相应地设置一个布尔型包变量
  2. 一个SQL任务来创建工作表
  3. 一个数据流任务来填充工作表

任务1和2之间的先决条件将是布尔型为真的表达式:

先决条件编辑器的截图,显示@DoNorthRegion表达式

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

四个序列容器的截图,一个展开显示内容


这也将消除您在http://stackoverflow.com/questions/13976084/delete-a-single-sheet-in-excel-using-ssis中描述的问题,因为只有在有数据要放入其中时才会创建该工作表。 - Edmund Schweppe
啊,是的!这似乎是一个非常好的解决方案。我有一个非常相似的东西,但是序列容器都链接到一个共同的父级。有点像“蜘蛛腿”配置。如果我遇到任何问题,我会回报的。感谢您的帮助。 - rvphx
我添加了所有必要的部分,很高兴它按照我想要的方式工作。非常感谢你的帮助。 - rvphx
当我在Visual Studio中使用“执行容器”时,这对我有效,但出现问题的是,当我执行包时失败了 - 如果您有任何想法,欢迎分享,因为我无法理解差异 - 执行容器可以工作,但当我执行包时它失败了。 - codeputer
@codeputer,我们需要更多的细节信息。是否有任何项目级别参数被调用或从包执行中获取的配置?您已经解决了这个问题吗? - rvphx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接