如何跨包中的脚本任务访问变量?

How can I access a variable across script tasks within a package?

提问人:Conrad Jagger 提问时间:11/1/2012 最后编辑:Conrad Jagger 更新时间:11/2/2012 访问量:7544

问:

我在序列容器中有两个 SSIS 脚本任务。我已经在 中声明了变量 StartTime。我想在 中使用这个变量。Script Task 1Script Task 2

是否可以访问其中的变量?如何访问该变量?StartTimeScript Task 2

SSIS系列

评论

0赞 Conrad Jagger 11/2/2012
我在控制流上使用脚本任务 - 所以在 1 序列容器中,我有两个脚本任务

答:

1赞 Samuel Vanga 11/2/2012 #1

确保变量 (StartTime) 的作用域为 Package - 这应该可以。变量可用于整个包。

在第一个脚本任务中,将变量添加为 Readwrite 变量,并可能在脚本中分配一些值。

在第二个脚本任务中,将其添加为读取或读取写入变量,您可以在那里引用它。

8赞 user756519 11/2/2012 #2

在 SSIS 包中创建变量时,可以定义变量的作用域。此范围定义控制流上的哪些任务对变量具有可见性。

描述变量作用域的示例包:

下面是一个示例 SSIS 包。

我创建了一个包,其中包含一个序列容器和两个脚本任务。我在不同的作用域下创建了四个变量。

如果要查看在不同作用域下定义的所有变量,则需要选中窗格上的第四个按钮。该选项由屏幕截图中的箭头指示。Variables

以下是变量在每个作用域中的工作方式:

StartTime_Package - 此变量在作用域下声明,该作用域也恰好是包名称。这是顶级范围。此变量将对控制流上的所有任务可见。MyPackage

StartTime_Sequence - 此变量在作用域下声明,作用域是序列容器任务的给定名称。此变量仅对 Sequence 容器和序列容器中的任务可见。Sequence Container

StartTime_Task1 - 此变量在作用域下声明,作用域是序列容器中第一个脚本任务的给定名称。此变量仅对第一个脚本任务可见,而对其他任务不可见。Script Task 1

StartTime_Task2 - 此变量在作用域下声明,作用域是序列容器中第二个脚本任务的给定名称。此变量仅对第二个脚本任务可见,而对其他任务不可见。Script Task 2

Variables Scope

如何检查任务是否可以访问变量?

这是确定特定任务是否可以访问变量的更简单方法。让我们取消选中“变量”窗格上的第三个选项。

单击 .您会注意到,该变量未显示在“变量”窗格中,因为它没有可见性。Script Task 1StartTime_Task2Script Task 1

同样,您可以单击任务并验证它可以访问哪些变量。

您必须根据自己的要求决定变量的作用域。如果要在任务之间共享变量的值,则可以在最顶层的包级别范围内声明该变量。

如果您非常确定不会访问特定任务之外的某个变量,则可以在该任务的作用域级别声明它是安全的。

Scope of the variables.

如何使用脚本任务读取变量或将值写入变量?

双击脚本任务,它将带来脚本任务编辑器。您必须确定是只想读取变量值还是在任务中修改它。我将修改一个变量值,然后在消息框中显示该值。为此,我必须选择一个已经在包上声明的变量,并为脚本任务提供读写访问权限。单击属性旁边的省略号按钮ReadWriteVariables

Script Task Editor

选择变量将列出脚本任务有权访问的变量(系统级和用户级)。我要选择变量。StartTime_Package

Select Variables

您可以看到该变量现在列在属性中。您可以选择多个变量。单击“编辑脚本”,以便我们可以修改 C# 代码以将值写入变量,然后读取它。

Edit Script

将以下代码粘贴到脚本任务中。第一行分配值,这里我只是在今天的日期上增加了 7 天。第二行在消息框中显示变量的值。

public void Main()
{
    Dts.Variables["StartTime_Package"].Value = DateTime.Now.AddDays(7);

    MessageBox.Show(Dts.Variables["StartTime_Package"].Value.ToString());
    Dts.TaskResult = (int)ScriptResults.Success;
}

Script Task code

如果我们运行包,它将在消息框中显示值。该包于 2012 年 11 月 1 日执行,您可以显示该包显示 2012 年 11 月 8 日的修改值。

Message box

希望这能让您对 SSIS 中的变量范围有所了解。