本文可帮助你解决 SQL Server Integration Services (SSIS) 检查点不适用于 For Loop 或 Foreach 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。