SSIS 2012“全球”变量

时间:2013-07-16 04:30:25

标签: variables ssis package ssis-2012

我遇到了一个试图将数据传递到子包的问题。 我的父包运行一个数据库,检查它与另一个数据库是否运行。目前我正在使用ForEach循环来执行此操作。然后,我可以通过一个唯一ID识别我需要运行的行。然后我将它传递给适当的子包进行处理。

我的问题是,将该标识符写入4字节变量的最简单方法是什么,以便它在解决方案级别而不是包级别上可用。就我所见,我无法将任何内容传递给子包。

感谢您的协助! -D

1 个答案:

答案 0 :(得分:3)

参数是您将在SSIS 2012项目部署模型中寻找的内容,以允许您将数据传递到子包。在子包中,您需要添加一个参数。

我创建了5个包:MasterPackage和ChildPackages_0 ... ChildPackage4

MasterPackage

enter image description here

MasterPackage定义了2个变量:“Variable”(Int32)和“ChildPackage”。 ChildPackage(String)已应用表达式"ChildPackage_" + (dt_wstr,1) @[User::Variable] + ".dtsx"随着Variable的值发生变化,此字符串也会发生变化。

添加一个Foreach循环(项目枚举器,从0到4),我将当前值映射到命名不佳的变量“变量”。

我定义了一个运行包的Execute Package Task。在Parameter Bindings选项卡中,我将名为“Parameter”的子参数映射到变量“User :: Variable”。我还在PackageName属性上将表达式应用为变量@ [User :: ChildPackage]。这会导致包的名称发生变化,以反映变量的值。

ChildPackage_X

在我的子包中,我创建了一个名为“Parameter”的参数,分配了默认值-1并检查了Required属性。子包只有一个脚本任务,可以发出参数的值。我将System::PackageName, $Package::Parameter添加到该脚本的只读参数列表中。该代码如下:

public void Main()
{
    // System::PackageName, $Package::Parameter
    bool fireAgain = true;
    string myVariableName = "$Package::Parameter";
    int myVariableValue = -1;
    string packageName = Dts.Variables["System::PackageName"].Value.ToString();
    myVariableValue = (int)Dts.Variables[myVariableName].Value;

    Dts.Events.FireInformation(0, string.Format("{0} Script task", packageName), string.Format("{0}:{1}", myVariableName, myVariableValue), string.Empty, 0, ref fireAgain);

    Dts.TaskResult = (int)ScriptResults.Success;
}

输出

运行主程序包后,我收到了以下预期输出。每个子包在轮到它时触发,脚本任务显示该值通过其参数按预期传递给它们。

SSIS package "C:\sandbox\SO_SSIS\SO_SSIS\MasterPackage.dtsx" starting.
Executing ExecutePackageTask: C:\sandbox\SO_SSIS\SO_SSIS\ChildPackage_0.dtsx
Information: 0x0 at SCR Emit parameter, ChildPackage_0 Script task: $Package::Parameter:0
Executing ExecutePackageTask: C:\sandbox\SO_SSIS\SO_SSIS\ChildPackage_1.dtsx
Information: 0x0 at SCR Emit parameter, ChildPackage_1 Script task: $Package::Parameter:1
Executing ExecutePackageTask: C:\sandbox\SO_SSIS\SO_SSIS\ChildPackage_2.dtsx
Information: 0x0 at SCR Emit parameter, ChildPackage_2 Script task: $Package::Parameter:2
Executing ExecutePackageTask: C:\sandbox\SO_SSIS\SO_SSIS\ChildPackage_3.dtsx
Information: 0x0 at SCR Emit parameter, ChildPackage_3 Script task: $Package::Parameter:3
Executing ExecutePackageTask: C:\sandbox\SO_SSIS\SO_SSIS\ChildPackage_4.dtsx
Information: 0x0 at SCR Emit parameter, ChildPackage_4 Script task: $Package::Parameter:4
SSIS package "C:\sandbox\SO_SSIS\SO_SSIS\MasterPackage.dtsx" finished: Success.