我有一个SSIS 2008软件包,可以调用大约25个其他SSIS软件包。
每个子包都将特定文件加载到表中。但有时这些输入文件中的一个或多个将丢失。
如何让子包失败(因为文件丢失)但让其余的父包继续运行?
我尝试增加父包的最大错误数,调用每个子包的父包中的任务以及子包本身。这似乎没有任何区别。当我在缺少文件的情况下运行它时仍然会出现此错误:
SSIS警告代码DTS_W_MAXIMUMERRORCOUNTREACHED。该 执行方法成功,但是 达到的错误数量(2) 允许的最大值(1);导致 失败。这个数字发生时 错误达到指定的数量 在MaximumErrorCount中。改变 MaximumErrorCount或修复错误。
编辑: failpackageonfailure和faulparentonfailure在所有地方都已设置为false。
答案 0 :(得分:1)
在执行包任务的属性中,您可以设置failpackageonfailure和faulparentonfailure。我没有使用过这些,但你可以和它们一起玩,以获得你想要的结果。
答案 1 :(得分:1)
旁注:为简单起见,我在父SSIS包上设置了这些设置。
序列容器中有一个MaximumErrorCount值&包级别。如果您正在使用此功能,请确保您的值不同步,因为程序包级别设置优先。
另一个选项是ForcedExecutionValue。
要进行此设置,请加载每个容器的属性选项卡,然后:
1)ForceExecutionValue to TRUE
这将导致容器返回您放入变量的任何值(参见步骤2),尽管任务的结果。
2)ForcedExecutionValue to 0
这将作为该任务的返回值,并将其设置为0(true,认为“返回0”,如在C ++中)。
我希望有所帮助。
这将导致包
答案 2 :(得分:1)
我没试过这个,但这就是我接近它的方法。 为文件名和子包名创建变量。 使用For Each Loop容器。让它浏览文件的位置并一次拉出一个文件名。使用文件名更改子包名称变量。在容器中有运行子包的任务,并根据子包名变量的值动态设置名称。
然后它应该只尝试运行具有适当文件的子包。
答案 3 :(得分:0)
我已经完成了这种场景开发,首先计划包执行方法,因为每当你得到一个我们需要处理包的文件时,如果没有失败或离开包最终我们的目标是处理所有的文件包现有。为所有包取一个变量。使用父包中的脚本组件或连接字符串将变量设置为文件现有的“Y”或“N”。在变量值上执行包的现有条件。
这种方法为我们提供了处理多个文件的结果,这些文件具有不同的源文件。
感谢 prav