For 循环或 Foreach 循环容器项不遵循 SSIS 检查点

本文可帮助你解决 SQL Server Integration Services (SSIS) 检查点不适用于 For LoopForeach Loop 容器项的问题。

原始产品版本:SQL Server
原始 KB 数: 2624458

现象

假设出现了下面这种情景:

  • 在计算机上安装Microsoft SQL Server Integration Services。

  • 创建一个 SSIS 包,其中包含一个 For 循环容器项,后跟序列容器。

  • For 循环容器和序列容器项均具有以下任一项:

    • 执行 SQL 任务(或)
    • 两个或多个并行运行的 SQL 任务。
  • 为 SSIS 包启用检查点设置。

  • 运行 SSIS 包

  • For 循环容器完成,包执行将来到序列容器。

  • 执行以下操作之一:

    • 对于具有单个执行 SQL 任务的包,在任务仍在运行时停止包执行。
    • 对于运行多个执行 SQL 任务的包,可以停止包执行,或者在其中一个任务中遇到失败,而另一个执行 SQL 任务(s)仍在运行
  • SSIS 包再次运行。

在此方案中,包从 For Loop 容器而不是 Sequence 容器开始。

注意

此问题不绑定到执行 SQL 任务。 这也可能与其他任务一起发生。

原因

此为有意行为。 不会为 For Loop 容器和 Foreach Loop 容器项保存检查点数据。 如果循环中的子容器成功运行,则不会记录在检查点文件中。 因此,当包重新启动时,将再次执行其中每个容器项中的任务。

解决方法

若要解决此问题,请将容器Foreach Loop或容器包装For Loop在容器内Sequence