Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何修改SSIS中的变量?_Sql Server_Sql Server 2008_Ssis - Fatal编程技术网

Sql server 如何修改SSIS中的变量?

Sql server 如何修改SSIS中的变量?,sql-server,sql-server-2008,ssis,Sql Server,Sql Server 2008,Ssis,我有一个简单的字符串变量,其值如下:“C:\Test.txt”。 现在我想编辑变量以指向另一个文件。 我找不到这样做的方法。我可以更改名称、数据类型,但不能更改值本身! 我是否需要删除变量并创建新变量 更新:问题是由设置为“True”的“ReadOnly”属性引起的。对于典型场景,请参阅下面的公认答案。如果要在designer中更改它,只需右键单击可用空间和-->变量 但如果您想在运行时更改它,我建议您: 创建脚本任务 选择语言 将变量添加到ReadWriteVariables 编辑脚本 例如,

我有一个简单的字符串变量,其值如下:“C:\Test.txt”。 现在我想编辑变量以指向另一个文件。 我找不到这样做的方法。我可以更改名称、数据类型,但不能更改值本身! 我是否需要删除变量并创建新变量


更新:问题是由设置为“True”的“ReadOnly”属性引起的。对于典型场景,请参阅下面的公认答案。

如果要在designer中更改它,只需右键单击可用空间和-->变量

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

  • 创建脚本任务
  • 选择语言
  • 将变量添加到ReadWriteVariables
  • 编辑脚本
  • 例如,在VB中:

    Dts.Variables(“myVariable”).Value=@“C:\Test2.txt”

    Dts.TaskResult=ScriptResults.Success


  • 正如@Yuck和@devarc所指出的,a持有两种不同的价值观。设计时值是首次创建变量时指定的值。在您的情况下,变量将C:\Test.txt作为设计时值。每次打开包时,它都会显示C:\Test.txt,直到您在

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

    有一件事经常让人们感到困惑,那就是他们已经正确地更改了运行时值,但是当他们在竞价中运行时,他们看到了“旧”值。在包执行期间,“变量”窗口中显示的值不会更改

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

    设置值 SSI中的大多数内容的值都可以在运行时通过一组详细信息或通过源建立。在我看来,最大的区别是这种方法的价值将始终是包执行的整个生命周期的价值。程序包的顺序或并行调用可以更改该值,但对于该执行,该值将保持不变(除非显式修改该值)

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

    dtexec /file C:\Generated.dtsx /set \Package.Variables[User::CurrentFile].Properties[Value];"C:\Test2.txt"
    
    配置 SSIS提供了一个选项来创建配置源以向包提供运行时值。我在上面链接的文章描述了配置选项的优缺点,这比我在这里要做的要好得多。我要说的是,我通常同时使用这两个选项—我的SET命令配置一个连接管理器,然后由包使用查找“完整”的软件包配置集

    计算一个值 SSIS中有多种任务可以更改变量的值,也可以使用表达式来更改值。我认为这些任务在包运行时会对值进行操作

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

    和是另外两个大任务,你应该看看分配一个变量值

    表达 表达式是SSIS工具箱中最漂亮的糖果。SSIS中的大多数“东西”都公开了用于配置的属性。这很有帮助,但使用指定表达式来构建这些属性是非常出色的

    例如,假设3个变量
    RootFolder
    FileName
    ComputedCurrentFile
    的值为C:\、File2.txt和空字符串。在
    ComputedCurrentFile
    的属性窗口中,我们将EvaluateExpression的值从False更改为True,然后使用类似
    @[User::RootFolder]+“\\”+@[User::FileName]
    将前两个变量的值简单地连接在一起。如果处理的文件名是标准的,但源文件夹经常更改,这可能会很有帮助。或者如果我们谈论的是输出,则通常使用表达式使用包运行的日期和时间来构建输出文件名


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

    我也面临着与您相同的问题,即一旦声明并定义了变量(对于例如:var1=text1.csv)在SSIS变量窗口中,我无法通过单击变量值字段来更新SSIS变量窗口中的变量值(对于例如:var1=text2.csv)

    应用于以下修复:-
    我注意到我使用ExpressionBuilder将var1变量用作表达式,以便更新值(例如:-var1=text2.csv)我使用了expression builder窗口。使用expression builder后,您可以看到text2.csv被映射到var1。

    是否要在设计时或运行时更改该值?@恶心:问题出现在设计时。真正的问题是我意外地将变量设置为只读,并且无法修改我的值。比ks的答案是tho!无论如何我都会接受它,因为这是在典型场景中修改变量的正确方法。