参数是您将在 SSIS 2012 项目部署模型中寻找的东西,以允许您将数据传递给子包。在子包中,您需要添加一个参数。
我创建了 5 个包:MasterPackage 和 ChildPackages_0 ... ChildPackage4
MasterPackage
MasterPackage 定义了 2 个变量:“Variable”(Int32)和“ChildPackage”。 ChildPackage (String) 应用了一个表达式"ChildPackage_" + (dt_wstr,1) @[User::Variable] + ".dtsx" 随着Variable 的值发生变化,这个字符串也会发生变化。
添加一个 Foreach 循环(项目枚举器,从 0 到 4)并将当前值映射到我命名不佳的变量“变量”。
我定义了一个运行包的执行包任务。在 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.