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

Con*_*ger 3 ssis

我在Sequence Container中有两个SSIS脚本任务.我已经声明的变量StartTimeScript Task 1.我想在这里使用这个变量Script Task 2.

是否有可能访问变量StartTimeScript Task 2?我如何访问变量?

小智 8

在SSIS包中创建变量时,可以定义变量的范围.此范围定义控制流上的哪些任务可以看到变量.

描述变量范围的示例包:

这是一个示例SSIS包.

我创建了一个包含序列容器和两个脚本任务的包.我在不同的范围内创建了四个变量.

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

以下是变量在以下每个范围中的工作方式:

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

StartTime_Sequence- 此变量在范围内声明,范围Sequence Container是序列容器任务的给定名称.此变量仅对Sequence容器和序列容器中的任务可见.

StartTime_Task1- 此变量在范围内声明,范围Script Task 1是序列容器中第一个脚本任务的给定名称.此变量仅对第一个脚本任务可见,而不显示其他任务.

StartTime_Task2- 此变量在范围内声明,范围Script Task 2是序列容器中第二个脚本任务的给定名称.此变量仅对第二个脚本任务可见,而不显示其他任务.

变量范围

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

这是一种更简单的方法来识别特定任务是否可以访问变量.我们取消选中Variables窗格中的第三个选项.

点击Script Task 1.您会注意到变量StartTime_Task2未显示在"变量"窗格上,因为Script Task 1它没有可见性.

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

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

如果您非常确定不会访问特定任务之外的某个变量,则可以安全地在该任务的范围级别声明它.

变量的范围.

如何使用Script Task读取变量或将值写入变量?

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

脚本任务编辑器

Select Variables将列出脚本任务可以访问的变量(系统和用户级别).我要选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;
}
Run Code Online (Sandbox Code Playgroud)

脚本任务代码

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

消息框

希望能让您了解SSIS中的变量范围.