如何在DTS Execute ProcessTask中使可执行文件路径动态化?

时间:2013-11-16 02:16:01

标签: ssis

我有一个DTS包,它通过Execute Process Task对象调用可执行文件。可执行文件的路径可以根据安装包含此产品的产品的位置而更改。有没有办法使可执行路径动态化?

我尝试将表达式用于可执行属性。我将它设置为存储过程中出现的值,但它似乎只计算保存包时的值。我尝试设置DelayValidation = true,但它似乎并没有在运行时更新它。

1 个答案:

答案 0 :(得分:2)

我相信你的包裹有问题。使用具体细节更新您的问题或与我的样本进行比较。

设置

我从我的基本位置创建了7个子文件夹,在每个子文件夹中,我放置了一个批处理文件

@echo off
REM N replaced with value 0-6
ECHO C:\ssisdata\EXEC\N\RunMe.bat

这导致了像

这样的结构
  • C:\ ssisdata \ EXEC \ 0 \ RunMe.bat
  • C:\ ssisdata \ EXEC \ 1 \ RunMe.bat
  • C:\ ssisdata \ EXEC \ 2 \ RunMe.bat
  • C:\ ssisdata \ EXEC \ 3 \ RunMe.bat
  • C:\ ssisdata \ EXEC \ 4 \ RunMe.bat
  • C:\ ssisdata \ EXEC \ 5 \ RunMe.bat
  • C:\ ssisdata \ EXEC \ 6 \ RunMe.bat

当我运行它们时,它只会报告硬编码的位置信息

SSIS

我创建了一个SSIS包,其中包含For Loop Container,内部是Execute Process Task,与Script Task

相关联

Control flow

变量

  • FolderBase:string - C:\ssisdata\EXEC摘要公共路径
  • FolderChoice:int - 0从0到6逐个增加值。循环使用强制更改可执行文件的位置
  • 输出:字符串 - ``捕获可执行文件的输出以证明它按预期工作
  • CurrentExecutable:string - C:\ssisdata\EXEC\0\RunMe.bat这是基于上述变量的表达式。表达式为@[User::FolderBase] + "\\" + (DT_WSTR, 1) @[User::FolderChoice] + "\\RunMe.bat"

执行流程任务

我在这里没有兴趣。我将标准输出到SSIS变量,我实际上使用C:\ ssisdata \ Exec \ RunMe.bat作为我的源,但下一步更新了这个屏幕截图。

execute process task

在“表达式”标签上,我使用了我的变量@[User::CurrentExecutable]并将其分配给Executable属性。

expresions

脚本任务

我传递了我的@[User::Output]变量并致电Dts.Events.FireInformation以显示输出。

Exec results