我有一个包含流程任务的 SSIS 包。流程任务需要执行批处理文件。批处理文件的位置因环境(开发、生产)而异。
如何将 Process Task 对象的 Executable 属性的 tghe 值动态设置为用户变量?
我有一个包含流程任务的 SSIS 包。流程任务需要执行批处理文件。批处理文件的位置因环境(开发、生产)而异。
如何将 Process Task 对象的 Executable 属性的 tghe 值动态设置为用户变量?
我认为您需要创建一个变量,该变量将文件夹路径和可执行文件名作为表达式进行评估。然后,您需要将评估为表达式的这个变量分配给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。如屏幕截图#2 - #4所示,使用 echo 命令填充它们。
创建一个 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 文件回显的值。
在包的控制流路径上,放置 Execute Process Task 和 Script Task,如屏幕截图#8所示。
如屏幕截图#9 - #11所示配置执行流程任务。在 Task 的 Process 部分,您需要为初始配置指定一个 Executable 路径。此外,指定 StandardOutputVariable(此示例用于此示例)。在 Expressions 部分,通过指定变量 @[User::ExecutablePath] 覆盖 Executable 路径
在脚本任务上,替换屏幕截图#12 - #13中所示的 Main 方法。
执行包。您应该得到如屏幕截图#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:
我写这个评论的原因是我有一个类似的错误
Package Validation Error Error at @#@#@# [Execute Process Task]: The executable is not specified.
我所要做的就是在变量的 EvaluateAsExpression 中选择 TRUE。仅供参考,我的价值表达是“C:\PortableApps\winscp517\WinSCP.exe”
!
我知道这个话题有点老了,但你会这样做。
就我而言,我想调用一个批处理脚本。脚本的路径会根据我所处的环境而变化。所以我有一个变量,它将设置批处理脚本的正确路径。我还有另一个参数变量,它也会根据区域而变化。
如果您现在返回“编辑”您的流程任务,您将看到 Executable 和参数是自动填充的