SSIS - 跳过丢失的文件

时间:2010-06-14 18:07:45

标签: sql sql-server sql-server-2008 ssis

我有一个SSIS 2008软件包,可以调用大约25个其他SSIS软件包。

每个子包都将特定文件加载到表中。但有时这些输入文件中的一个或多个将丢失。

如何让子包失败(因为文件丢失)但让其余的父包继续运行?

我尝试增加父包的最大错误数,调用每个子包的父包中的任务以及子包本身。这似乎没有任何区别。当我在缺少文件的情况下运行它时仍然会出现此错误:

  

SSIS警告代码DTS_W_MAXIMUMERRORCOUNTREACHED。该   执行方法成功,但是   达到的错误数量(2)   允许的最大值(1);导致   失败。这个数字发生时   错误达到指定的数量   在MaximumErrorCount中。改变   MaximumErrorCount或修复错误。

编辑: failpackageonfailure和faulparentonfailure在所有地方都已设置为false。

4 个答案:

答案 0 :(得分:1)

在执行包任务的属性中,您可以设置failpackageonfailure和faulparentonfailure。我没有使用过这些,但你可以和它们一起玩,以获得你想要的结果。

答案 1 :(得分:1)

旁注:为简单起见,我在父SSIS包上设置了这些设置。

序列容器中有一个MaximumErrorCount值&包级别。如果您正在使用此功能,请确保您的值不同步,因为程序包级别设置优先。

另一个选项是ForcedExecutionValue。

要进行此设置,请加载每个容器的属性选项卡,然后:

1)ForceExecutionValue to TRUE

这将导致容器返回您放入变量的任何值(参见步骤2),尽管任务的结果。

2)ForcedExecutionValue to 0

这将作为该任务的返回值,并将其设置为0(true,认为“返回0”,如在C ++中)。

我希望有所帮助。

这将导致包

  • 使用“ForcedExecutionValue”将属性加载到0,然后设置强制

答案 2 :(得分:1)

我没试过这个,但这就是我接近它的方法。 为文件名和子包名创建变量。 使用For Each Loop容器。让它浏览文件的位置并一次拉出一个文件名。使用文件名更改子包名称变量。在容器中有运行子包的任务,并根据子包名变量的值动态设置名称。

然后它应该只尝试运行具有适当文件的子包。

答案 3 :(得分:0)

我已经完成了这种场景开发,首先计划包执行方法,因为每当你得到一个我们需要处理包的文件时,如果没有失败或离开包最终我们的目标是处理所有的文件包现有。为所有包取一个变量。使用父包中的脚本组件或连接字符串将变量设置为文件现有的“Y”或“N”。在变量值上执行包的现有条件。

这种方法为我们提供了处理多个文件的结果,这些文件具有不同的源文件。

感谢 prav