2

我在 Foreach 循环中使用数据流迭代了几年,但是有些年份不会返回任何数据,因此它们的 SSIS 包失败,有没有办法处理这个问题?告诉包忽略那些空白并继续执行?

谢谢,

4

2 回答 2

2

如果您不想接触数据是如何传递给Foreach组件的,则可以采取一种方法:

  1. 您可以在容器中包含一个附加Execute SQL Task组件,该组件Foreach首先检查是否有任何数据要处理。

  2. 创建一个变量,您的 SQL 任务会将记录计数设置为该变量,例如@cntProceed

  3. 将此组件设置为在您的 Dataflow 任务之前运行。

  4. 修改优先约束(从 SQL 任务到 Dataflow 任务的绿色箭头)。将evaluation operationto Expression and ConstraintValuetoSuccessExpressionto设置为@cntProceed != 0

这一切的作用:在 foreach 组件/容器中,它将首先检查是否存在任何可使用的数据。这就是附加组件要做的事情,如果有数据要使用,它将进入数据流组件。否则,那个"each"(或者更确切地说......那个循环)将结束并且Foreach将移动到下一个循环。

于 2012-01-04T20:23:47.030 回答
0

如果查询返回 0 行,我不确定为什么数据流会失败。一种可能的解决方案是询问有效年份的数据,并且只遍历有效年份。这可以通过以下方式完成:

  1. 在 ForEach 循环容器之前创建一个执行 SQL 任务
  2. 将 ResultSet 设置为 Execute SQL 任务的完整行
  3. 将结果集选项卡设置为对象变量
  4. 将 ForEach 循环容器设置为 ForEach ADO 枚举器
  5. 将 ADO 对象源变量设置为对象变量
  6. 将变量映射设置为年份的变量
  7. 将年份作为参数传递给数据流。

您可以查看包装上的代码并发布吗?我很高兴看到我是否可以复制您遇到的问题并为您提供更直接满足您发布的需求的解决方案。

于 2012-01-04T20:18:15.680 回答