我有一个包含Process Task的SSIS包。流程任务需要执行批处理文件。批处理文件的位置因环境(开发,生产)而异。
如何动态设置Process Task对象的Executable属性值为用户变量?
答案 0 :(得分:19)
我认为你需要创建一个变量,它接受文件夹路径和可执行文件名作为表达式进行评估。然后,您需要将此变量作为表达式分配给Execute Process Task
的可执行属性。此外,您需要在设计期间拥有有效的可执行路径。
这是一个粗略的分步示例,说明如何将变量传递给Execute Process Task的Executable属性。该示例是使用SSIS 2008 R2创建的,并且还使用三个.bat文件来说明功能。尽管该示例位于SSIS 2008 R2中,但该逻辑应适用于SSIS 2005。
创建三个.bat文件,即Process_0.bat,Process_1.bat和Process_2.bat。参考屏幕截图#1 。使用echo命令填充它们,如屏幕截图#2 - #4 所示。
创建SSIS包。我在开头的YYYYMMDD_hhmm格式中命名了包,然后是SO代表Stack Overflow,后面是SO问题ID,最后是描述。这对我来说很容易在以后再提到。请参阅屏幕截图#5 。
创建以下变量:参考屏幕截图#6 。
ExecutableFileName - 此变量的类型为字符串。它将包含可执行文件名。
ExecutableFolder - 此变量的类型为字符串。它将包含可执行文件'文件夹路径。
ExecutableFilePath - 此变量的类型为字符串。不要键入此变量的任何值。这将是一个表达式,它结合了变量ExecutableFolder和ExecutableFileName来生成完整的文件路径。参考屏幕截图#7 。选择变量,然后按F4打开属性窗口。将EvaluateAsExpression设置为True
并将表达式设置为@[User::ExecutableFolder] + @[User::ExecutableFileName]
ExecutableOutput - 此变量的类型为字符串。它将存储可执行文件的输出值。在这种情况下,.bat文件回显的值。
在包的控制流路径上,放置执行流程任务和脚本任务,如屏幕截图#8 所示。
配置执行流程任务,如屏幕截图#9 - #11 所示。在Task的Process部分,您需要为初始配置指定可执行路径。另外,指定StandardOutputVariable(这是针对此示例)。在“表达式”部分,通过指定变量@ [User :: ExecutablePath]
来覆盖可执行文件路径在脚本任务中,替换主要方法,如屏幕截图#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:强>
答案 1 :(得分:2)
我写这篇评论的原因是我有类似的错误
Package Validation Error Error at @#@#@# [Execute Process Task]: The executable is not specified.
而我所要做的就是在Variable的EvaluateAsExpression中选择TRUE。仅供参考,我的价值表达是“C:\ PortableApps \ winscp517 \ WinSCP.exe”
HTH!
答案 2 :(得分:0)
我知道这个话题有点老了,但这就是你要做的。
就我而言,我想调用批处理脚本。脚本的路径根据我所处的环境而变化。所以我有一个变量,它将设置批处理脚本的正确路径。我还有另一个参数变量,它也根据地区而变化。
如果您现在返回“编辑”您的流程任务,您将看到可执行文件和参数是自动填充的