如何在SSIS中修改变量?

6 sql-server ssis sql-server-2008

我有一个简单的String变量,其值如下:"C:\ Test.txt".现在我想编辑变量以指向不同的文件.我找不到办法做到这一点.我可以更改名称,数据类型,但不能更改值本身!我是否需要删除变量并创​​建新变量?

更新:问题是由"ReadOnly"属性设置为"True"引起的.对于典型情况,请参阅下面接受的答案.

bil*_*nkc 15

正如@Yuck和@devarc所指出的,变量有两个不同且不同的值.设计时值是您首次创建变量时分配的值.在您的情况下,变量将C:\ Test.txt保存为设计时值.每次打开包时,它都会显示C:\ Test.txt,直到您更改它为止

CurrentFile

要在程序包运行时更改变量的值,您可以选择设置值或计算值.在这里,我创建了一个包含级别的变量CurrentFile,其值为C:\ Test.txt

经常让人们兴奋的一件事是他们已经正确地改变了运行时间值,但是当他们在BIDS中运行时,他们看到了"旧"值.在包执行期间,"变量"窗口中显示的值不会更改.

在此输入图像描述

在程序包执行期间,我的变量窗口仍显示设计时值(C:\ Test.txt),但真实值反映在Locals窗口(C:\ Test2.txt)中

设置一个值

SSIS中大多数任何内容的值都可以在运行时通过一组详细的命令行选项或通过配置源来建立.我认为最大的不同是这种方法是值始终是包执行的整个生命周期的值.程序包的顺序或并行调用可以更改该值,但对于执行,该值将保持不变(禁止对值进行显式修改).

/组

命令行执行(dtexec.exe),右键单击包并从文件系统(dtexecUI.exe)运行或创建SQL Server Integration Services的SQL代理作业步骤都允许通过SET命令提供运行时值.使用上面的变量,以下命令将运行时值设置为C:\Test2.txt

dtexec /file C:\Generated.dtsx /set \Package.Variables[User::CurrentFile].Properties[Value];"C:\Test2.txt"
Run Code Online (Sandbox Code Playgroud)

组态

SSIS提供了一个创建配置源的选项,以便为包提供运行时值.我上面链接的文章在描述配置选项的优缺点方面比我在这里做的要好得多.我会说我通常使用两者 - 我的SET命令配置一个连接管理器,然后由包使用它来查找"完整"的包配置集.

计算一个值

SSIS中有许多任务可以更改变量的值以及使用表达式来更改值.我认为这些是在包裹飞行时按价值运作的东西.

任务

脚本任务是最常用的机制之一,但我发现SSIS工具包中的其他工具通常更适合更改变量值.

Foreach循环容器执行SQL任务是您应该查看的两个重要任务,用于分配变量值.

表达式

表达式是SSIS工具箱中最辉煌的糖果.SSIS中的大多数"东西"都会公开配置属性.这很有帮助,但是使用赋值表达式来构建这些属性非常出色.

例如,想象3个变量RootFolder,FileName并且ComputedCurrentFile值为C:\,File2.txt和空字符串.在Properties窗口中,ComputedCurrentFile我们将EvaluateAsExpression的值从False更改为True,然后使用像@[User::RootFolder]+ "\\" +@[User::FileName]这样的表达式简单地将前两个变量的值连接在一起.如果处理的文件名是标准的但源文件夹经常更改,这可能会有所帮助.或者,如果我们讨论输出,通常使用表达式来使用日期和可能的包运行时间来构建输出文件名.

最后,没有什么能阻止这些方法的混合和匹配.我通常使用配置将文件枚举器指向正确的起始文件夹,然后使用计算值来标识当前文件以进行处理.


dev*_*arc 8

如果你想在设计师中更改它,只需右键单击自由空间和 - >变量.

但是如果你想在运行时更改它,我建议你:

  1. 创建脚本任务
  2. 选择语言
  3. 将您的变量添加到ReadWriteVariables.
  4. 编辑脚本.
  5. 例如在VB中:

    Dts.Variables("myVariable").Value = @"C:\ Test2.txt";

    Dts.TaskResult = ScriptResults.Success