如果文件系统任务(例如重命名)失败,例如文件不存在,则SSIS将其视为错误.这意味着整个包失败了.我可以通过使用脚本任务或将包的最大错误设置为多个来解决问题.将程序包的最大错误设置为多个错误的问题是,如果程序包中的其他位置发生错误,程序包将不会失败.
那么有没有办法以某种方式吞下错误,仍然能够根据文件系统任务的成功或失败进行分支?我尝试将文件任务粘贴到ForceExecutionResult设置为Success的序列容器中,但是程序包仍然无法说达到最大错误计数.
这是一个可能的选择.您可以通过Precedence Constraint
将文件系统任务更改为后来实现问题中提到的要求Completion
.以下示例显示了如何完成此操作.该示例是使用创建的,SSIS 2008 R2
但也适用于以前的版本.
分步过程:
创建一个SSIS包并创建两个变量,如屏幕截图#1所示.将一些不存在的文件路径值分配给变量.
在包的控制流选项卡上,放置文件系统任务,脚本任务和数据流任务,如屏幕截图#2所示.脚本任务和数据流任务在这里是假的,并且任务未配置为执行任何操作.
配置文件系统任务,如屏幕截图#3所示.
屏幕截图#4显示了程序包执行,并且正如预期的那样,文件系统任务失败,因为文件路径不存在.此外,由于错误,程序包在文件系统任务之后停止执行任务.
右键单击和之间的优先约束箭头File System Task
,Script Task
然后选择完成,如屏幕截图#5所示.箭头应从绿色变为蓝色.
屏幕截图#6显示了优先约束更改后的包执行.文件系统任务仍然失败,但其他任务继续执行.Earlier
,条件是只有在文件系统任务成功时才执行脚本任务.Now
,条件是在文件系统任务完成其执行后执行脚本任务(无论成功或失败).
如果您希望包装根据成功/失败完全采用两种不同的路径.您可以执行此操作,如屏幕截图#7和#8所示.红色箭头表示将在文件系统任务失败时执行路径,绿色箭头表示将在成功执行文件系统任务时执行路径.我C:\temp\Source.txt
在截屏#7中显示的包执行之前在路径中创建了一个文件.程序包执行后,文件被重命名,路径不再存在.因此,程序包失败,如屏幕截图#8所示.
希望有所帮助.
截图#1:
截图#2:
截图#3:
截图#4:
截图#5:
截图#6:
截图#7:
截图#8: