我有一个包含过程任务的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 。
True
并将表达式设置为@[User::ExecutableFolder] + @[User::ExecutableFileName]
在软件包的控制流路径上,放置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/