SSIS验证Foreach文件枚举器

时间:2012-12-04 06:53:24

标签: ssis foreach-loop-container

我有一个ssis项目,首先,我有一个Foreach文件枚举器,里面有多个任务。它在正常情况下完美无缺,但是如果枚举器目录中没有文件,则会发生错误,问题是,如何对其进行验证或某种排序以避免它在运行时抛出错误?感谢

img links

SSIS http://s15.postimage.org/l41py15aj/ssis.png 错误 http://s15.postimage.org/rj0qupc0b/ssiserror.png

3 个答案:

答案 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 之后的其余代码正常继续。