gpt4 book ai didi

sql-server - 如何修改SSIS中的变量?

转载 作者:行者123 更新时间:2023-12-02 17:04:07 26 4
gpt4 key购买 nike

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

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

最佳答案

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

CurrentFile

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

经常让人们失望的一件事是他们正确地更改了运行时值,但是当他们在 BIDS 中运行它时,他们看到的是“旧”值。在包执行期间,变量窗口中显示的值不会更改。

enter image description here

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

设置值

SSIS 中大多数东西的值都可以在运行时通过一组详细的 command-line options 建立起来。或通过 configuration来源。在我看来,这种方法最大的不同在于,该值将始终是包执行的整个生命周期的值。包的顺序或并行调用可以更改该值,但对于该执行,该值将保持不变(除非对该值进行显式修改。

/放

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

dtexec /file C:\Generated.dtsx /set \Package.Variables[User::CurrentFile].Properties[Value];"C:\Test2.txt"

配置

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

计算值

SSIS 中有多种任务可以更改变量的值以及使用表达式来更改值。我认为这些是在包裹运输过程中值(value)运作的东西。

任务

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

Foreach Loop ContainerExecute SQL Task是您应该查看分配变量值的另外两个大任务。

表达式

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

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

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

关于sql-server - 如何修改SSIS中的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9064438/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com