13

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

如何将 Process Task 对象的 Executable 属性的 tghe 值动态设置为用户变量? 在此处输入图像描述在此处输入图像描述

4

3 回答 3

25

我认为您需要创建一个变量,该变量将文件夹路径和可执行文件名作为表达式进行评估。然后,您需要将评估为表达式的这个变量分配给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:

1

#2:

2

#3:

3

#4:

4

#5:

5

#6:

6

#7:

7

#8:

8

#9:

9

#10:

10

#11:

11

#12:

12

#13:

13

#14:

14

#15:

15

#16:

16

#17:

17

#18:

18

于 2011-07-25T16:49:18.567 回答
2

我写这个评论的原因是我有一个类似的错误

Package Validation Error Error at @#@#@# [Execute Process Task]: The executable is not specified.

我所要做的就是在变量的 EvaluateAsExpression 中选择 TRUE。仅供参考,我的价值表达是“C:\PortableApps\winscp517\WinSCP.exe”

于 2014-01-06T08:11:19.653 回答
0

我知道这个话题有点老了,但你会这样做。

  1. 而不是编辑进程任务,右键单击并单击“属性”
  2. 进入属性后,向下滚动到“表达式”
  3. 在“表达式”旁边,您会看到三个点。点击三个点
  4. 添加一个“可执行”属性,然后在表达式部分中单击三个点以选择您的变量。您还可以为“参数”添加第二个属性。如果您正在运行批处理脚本或 powershell 脚本,这很有用

就我而言,我想调用一个批处理脚本。脚本的路径会根据我所处的环境而变化。所以我有一个变量,它将设置批处理脚本的正确路径。我还有另一个参数变量,它也会根据区域而变化。

如果您现在返回“编辑”您的流程任务,您将看到 Executable 和参数是自动填充的

于 2021-02-10T20:40:30.100 回答