Ssis 如何处理数据流任务上的空查询结果?

Ssis 如何处理数据流任务上的空查询结果?,ssis,bids,dataflowtask,Ssis,Bids,Dataflowtask,我在Foreach循环中使用数据流迭代了几年,但是有些年份不会返回任何数据,因此SSIS包失败,有没有办法处理这个问题?告诉包忽略这些空白并继续执行 谢谢,如果查询返回0行,我不确定为什么数据流会失败。一种可能的解决方案是查询有效年份的数据,并且只迭代有效年份。这可以通过以下方式实现: 在ForEach循环容器之前创建一个executesql任务 将执行SQL任务的结果集设置为整行 将“结果集”选项卡设置为对象变量 将ForEach循环容器设置为ForEach ADO枚举器 将ADO对象源变量设

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


谢谢,

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

  • 在ForEach循环容器之前创建一个executesql任务
  • 将执行SQL任务的结果集设置为整行
  • 将“结果集”选项卡设置为对象变量
  • 将ForEach循环容器设置为ForEach ADO枚举器
  • 将ADO对象源变量设置为对象变量
  • 将变量映射设置为该年度的变量
  • 将年份作为参数传递给数据流

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

    如果您不想涉及数据如何传递到
    Foreach
    组件,可以采用一种方法:

  • 您可以在
    Foreach
    容器中包含一个额外的
    Execute SQL Task
    组件,该组件首先检查是否有任何数据要处理

  • 创建一个SQL任务将记录计数设置为的变量,例如
    @cntproced

  • 将此组件设置为在数据流任务之前运行

  • 修改优先约束(从SQL任务到数据流任务的绿色箭头)。将
    求值操作
    设置为
    表达式和约束
    设置为
    成功
    表达式
    设置为
    @cntproced!=0


  • 这一切的作用是:在foreach组件/容器内部,它将首先检查是否存在要处理的数据。这就是附加组件将要做的,如果有数据要使用,它将转到数据流组件。否则,
    “每个”
    (或者更确切地说,..这一个循环)将结束,
    Foreach
    将移动到下一个。

    您将向Foreach循环传递什么,Foreach循环中有什么?请在您的帖子中添加更多详细信息。。它将帮助加载..我是foreach循环的传递和对象变量,在foreach循环中我有一个在查询中使用该变量的数据流任务(ole db源和目标),它们的变量(使用foreach的变量)工作正常,但例如,如果查询使用没有数据的年份(变量),则任务失败。我想处理那些不返回数据的情况,即如果查询类似于“Select*from sysobjects where=?”,并且没有当年的数据,那么它就失败了