0

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

图片链接

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

4

3 回答 3

3

您可以在循环之前有一个脚本任务,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在脚本标签的部分中添加变量

于 2012-12-04T09:00:13.610 回答
0

当错误发生并且您想要处理它时,您知道这种特殊情况。如果它因其他一些不可预见的错误而失败怎么办?

始终添加“OnError”事件处理程序。

现在,在使用事件处理程序处理您的错误情况后,您可以选择传播此错误以使任务失败(这是默认行为),或者您可以在“OnError”事件处理程序中将系统变量Propogate设置为false这将允许For Each之后的其余代码正常继续。

于 2012-12-04T15:50:54.160 回答
0

我将在 Sql 任务的禁用上设置表达式断言文件名是否有效。

我这里没有 SSIS,但我会查一下。

于 2012-12-04T07:02:02.477 回答