当文件不存在时,SSIS脚本任务不分支

时间:2011-12-02 21:12:21

标签: ssis constraints

我已按照此网站和其他网站上的建议检查文件是否存在使用脚本任务。代码工作正常(仅当文件存在时才运行步骤),只要我不想在文件不存在时进行一些不同的处理。当我尝试分支到不同的处理时,文件不存在,该分支从不执行,并且包成功完成而不运行“文件不存在”分支中的步骤。这是包裹正在做的事情。

  1. 查看是否存在头文件。如果是,请转到步骤2.如果否,请转到步骤4.
  2. 处理头文件
  3. 删除标题文件
  4. 查看是否存在详细信息文件。如果是,请转到步骤5.如果否,请停止处理
  5. 处理明细文件
  6. 删除详细信息文件
  7. 包变量:

    blnFileExists:Boolean,默认为False

    strListIndexFileFullPath:string,基于设置文件名和文件路径的其他字符串变量的表达式

    脚本任务

    属性:FailPackageOnFailure:False,FailParentOnFailure:False

    Imports System.IO
    Public Sub Main()
        Dts.Variables("blnFileExists").Value = File.Exists(Dts.Variables("strListIndexFileFullPath").Value)
        Dts.TaskResult = ScriptResults.Success
    End Sub
    

    “文件存在”约束的属性>评估操作:表达和约束,值:成功,表达式:@ blnFileExists == True,使用逻辑AND

    “文件不存在”约束的属性>评估操作:表达和约束,值:成功,表达式:@ blnFileExists == False,使用逻辑AND

1 个答案:

答案 0 :(得分:3)

在Precedence Constraint Editor中,您需要将Logical AND更改为逻辑OR

在您的方案中,您希望程序包在blnFileExists值为 true 时采用路径<或> blnFileExists值为(Notice the OR in the sentence)时的路径Logical AND如果将约束设置为blnFileExists,则包将期望两个表达式都成功。在这种情况下,这是不可能的,因为变量not both只能有 true false Script Task

话虽如此,您实际上不需要使用File System Task来检查文件是否存在。您可以使用File System Task来执行相同操作。

请在下面的链接中查看我的答案,了解如何使用文件系统任务检查文件是否存在。使用{{1}}时,您不需要编写任何C#代码或在优先约束中使用表达式。

Branching after a file system task in SSIS without failing the package

希望有所帮助。