我在序列容器中有两个 SSIS 脚本任务。我已经StartTime
在Script Task 1
. 我想在Script Task 2
.
是否可以访问StartTime
内部的变量Script Task 2
?如何访问变量?
我在序列容器中有两个 SSIS 脚本任务。我已经StartTime
在Script Task 1
. 我想在Script Task 2
.
是否可以访问StartTime
内部的变量Script Task 2
?如何访问变量?
在 SSIS 包中创建变量时,可以定义变量的范围。此范围定义控制流上的哪些任务对变量具有可见性。
这是一个示例 SSIS 包。
我创建了一个包,其中包含一个序列容器和两个脚本任务。我在不同的范围内创建了四个变量。
如果要查看不同作用域下定义的所有变量,需要勾选Variables
窗格上的第四个按钮。该选项由屏幕截图中的箭头指示。
以下是变量在每个范围内的工作方式:
StartTime_Package
- 这个变量是在 scope 下声明的MyPackage
,它也恰好是包名。这是顶级范围。此变量将对控制流上的所有任务可见。
StartTime_Sequence
- 该变量在范围内声明,范围Sequence Container
是序列容器任务的给定名称。此变量仅对序列容器和序列容器中的任务可见。
StartTime_Task1
- 此变量在范围内声明,范围Script Task 1
是序列容器中第一个脚本任务的给定名称。此变量仅对第一个脚本任务可见,其他任务不可见。
StartTime_Task2
- 此变量在范围内声明,范围Script Task 2
是序列容器中第二个脚本任务的给定名称。此变量仅对第二个脚本任务可见,其他任务不可见。
这是识别特定任务是否可以访问变量的更简单方法。让我们取消选中“变量”窗格上的第三个选项。
点击Script Task 1
。您会注意到该变量StartTime_Task2
未显示在“变量”窗格中,因为Script Task 1
它不可见。
同样,您可以单击任务并验证它可以访问哪些变量。
您必须根据您的要求决定变量的范围。如果您要跨任务共享变量的值,则可以安全地在最顶层的包级别范围内声明它。
如果您非常确定不会访问特定任务之外的某个变量,那么在该任务的范围级别声明它是安全的。
双击脚本任务,会出现脚本任务编辑器。您必须确定是只想读取变量值还是在任务中修改它。我将修改一个变量值,然后在消息框中显示该值。为此,我必须选择一个已经在包上声明的变量,并为脚本任务提供读写访问权限。单击ReadWriteVariables
属性的省略号按钮
选择变量将列出脚本任务有权访问的变量(系统和用户级别)。我要选择StartTime_Package
变量。
您可以看到现在在属性中列出的变量。您可以选择多个变量。单击编辑脚本,以便我们可以修改 C# 代码以将值写入变量然后读取它。
将以下代码粘贴到脚本任务中。第一行分配值,这里我只是在今天的日期上加上 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;
}
如果我们运行包,它将在消息框中显示该值。该包于 2012 年 11 月 1 日执行,您可以看到该包显示 2012 年 11 月 8 日的修改值。
希望这能让您对 SSIS 中的变量范围有所了解。
确保变量 (StartTime) 的范围是 Package - 应该这样做。变量可在整个包中使用。
在第一个脚本任务中,将您的变量添加为 Readwrite 变量,并可能在脚本中分配一些值。
同样在第二个脚本任务中,将其添加为读取或读写变量,您可以在那里引用它。