我有一个包含过程任务的SSIS程序包。流程任务需要执行批处理文件。批处理文件的位置因环境(开发,生产)而异。

如何动态地将Process Task对象的Executable属性的值设置为用户变量?

最佳答案

我认为您需要创建一个包含文件夹路径和可执行文件名的变量,以将其评估为表达式。然后,您需要将此值作为表达式的变量分配给Execute Process Task的Executable属性。此外,在设计期间,您需要具有有效的可执行路径。

这是一个粗略的分步示例,显示了如何将变量传递给Execute Process Task的Executable属性。该示例是使用SSIS 2008 R2创建的,并且还使用三个.bat文件来说明该功能。即使该示例在SSIS 2008 R2中,该逻辑也应适用于SSIS 2005。

创建三个.bat文件,即Process_0.bat,Process_1.bat和Process_2.bat。请参阅屏幕快照#1 。如屏幕快照#2 -#4 所示,使用echo命令填充它们。

创建一个SSIS包。我在一开始就以YYYYMMDD_hhmm的格式命名了该程序包,其后是SO代表堆栈溢出,然后是SO问题ID,最后是描述。这是我以后可以轻松引用的内容。请参阅屏幕快照#5

创建以下变量:请参阅屏幕快照#6

  • ExecutableFileName-此变量的类型为字符串。它将包含可执行文件名。
  • ExecutableFolder-此变量的类型为字符串。它将包含可执行文件的文件夹路径。
  • ExecutableFilePath-此变量的类型为字符串。请勿为此变量键入任何值。这是一个结合变量ExecutableFolder和ExecutableFileName生成完整文件路径的表达式。请参阅屏幕快照#7 。选择变量,然后按F4键打开属性窗口。将EvaluateAsExpression设置为True并将表达式设置为@[User::ExecutableFolder] + @[User::ExecutableFileName]
  • ExecutableOutput-此变量的类型为字符串。它将存储可执行文件的输出值。在这种情况下,.bat文件回显的值。

  • 在软件包的控制流路径上,放置Execute Process Task和一个Script Task,如屏幕快照#8 所示。

    如屏幕快照#9 -#11 所示,配置执行过程任务。在“任务”的“处理”部分,您需要为初始配置指定一个可执行路径。另外,指定StandardOutputVariable(此示例)。在“表达式”部分,通过指定变量@ [User::ExecutablePath]覆盖Executable路径。

    在脚本任务上,替换Main方法,如屏幕快照#12 -#13 所示。

    执行包。您应该获得如屏幕快照#14 中所示的输出。它显示.bat文件Process_0.bat是使用输出"Process 0"执行的。

    现在,将变量ExecutableFileName的值更改为Process_1.bat。请勿进行任何其他更改。执行包。您应该获得输出,如屏幕快照#15 -#16 所示。它显示.bat文件Process_1.bat是使用输出"Process 1"执行的。

    现在,将变量ExecutableFileName的值更改为Process_2.bat。请勿进行任何其他更改。执行包。您应该获得输出,如屏幕快照#17 -#18 所示。它显示.bat文件Process_2.bat是使用输出"Process 2"执行的。

    希望能有所帮助。

    截图:

    #1:

    #2:

    #3:

    #4:

    #5:

    #6:

    #7:

    #8:

    #9:

    #10:

    #11:

    #12:

    #13:

    #14:

    #15:

    #16:

    #17:

    #18:

    关于visual-studio-2005 - 当可执行路径来自用户变量时,如何执行流程任务,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6818398/

    10-14 10:52
    查看更多