我有一个 ssis 项目,首先,我有一个 Foreach 文件枚举器,里面有多个任务。它在正常情况下可以完美运行,但是如果枚举器目录中没有文件,则会发生错误,问题是,我如何对其进行验证或某种方式来避免它在运行时引发错误?谢谢
图片链接
ssis http://s15.postimage.org/l41py15aj/ssis.png 错误 http://s15.postimage.org/rj0qupc0b/ssiserror.png
我有一个 ssis 项目,首先,我有一个 Foreach 文件枚举器,里面有多个任务。它在正常情况下可以完美运行,但是如果枚举器目录中没有文件,则会发生错误,问题是,我如何对其进行验证或某种方式来避免它在运行时引发错误?谢谢
图片链接
ssis http://s15.postimage.org/l41py15aj/ssis.png 错误 http://s15.postimage.org/rj0qupc0b/ssiserror.png
您可以在循环之前有一个脚本任务,Foreach
它基本上检查文件和目录。如果目录或文件不存在,则有一个优先约束来停止包。
创建 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
在脚本标签的部分中添加变量
当错误发生并且您想要处理它时,您知道这种特殊情况。如果它因其他一些不可预见的错误而失败怎么办?
始终添加“OnError”事件处理程序。
现在,在使用事件处理程序处理您的错误情况后,您可以选择传播此错误以使任务失败(这是默认行为),或者您可以在“OnError”事件处理程序中将系统变量Propogate设置为false。这将允许For Each之后的其余代码正常继续。
我将在 Sql 任务的禁用上设置表达式断言文件名是否有效。
我这里没有 SSIS,但我会查一下。