我有一个ssis项目,首先,我有一个Foreach文件枚举器,里面有多个任务。它在正常情况下完美无缺,但是如果枚举器目录中没有文件,则会发生错误,问题是,如何对其进行验证或某种排序以避免它在运行时抛出错误?感谢
img links
SSIS http://s15.postimage.org/l41py15aj/ssis.png 错误 http://s15.postimage.org/rj0qupc0b/ssiserror.png
答案 0 :(得分:3)
你可以在Foreach
循环之前创建一个脚本任务,它基本上会检查文件和目录。如果目录或文件不存在,那么有一个precedence constraint来暂停包。
创建3个变量
Name DataType
Directory String
Files String
Exists int
在脚本任务中,只检查目录是否与文件一起存在。如果您需要枚举子文件夹或检查文件夹中是否存在特定文件,您可以修改代码
if (Directory.Exists(Dts.Variables["User::Files"].Value.ToString()))
{
if (Directory.GetFiles(Dts.Variables["User::Files"].Value.ToString()).Length != 0)
{
Dts.Variables["User::Exists"].Value = 1;
}
else
{
Dts.Variables["User::Exists"].Value = 0;
}
}
else
{
Dts.Variables["User::Exists"].Value = 0;
}
在优先约束中,检查变量Exists
Evaluation operation : Expression
Expression : @Exists==1
更新:
在脚本任务编辑器中,您需要在脚本标记的ReadOnlyVariable
部分中添加变量
答案 1 :(得分:0)
我会在禁用Sql任务时设置表达式断言文件名是否有效。
我没有SSIS,但我会查一查。
答案 2 :(得分:0)
当发生错误并且您想要处理它时,您知道这种特殊情况。如果因某些其他无法预料的错误而失败怎么办?
始终添加'OnError'事件处理程序。
现在,在使用事件处理程序处理错误条件后,您可以选择传播此错误以使任务失败(这是默认行为),或者您可以设置系统变量 Propogate ,在你的'OnError'事件处理程序中 false 。这将允许 For Each 之后的其余代码正常继续。