我遇到了一个试图将数据传递到子包的问题。 我的父包运行一个数据库,检查它与另一个数据库是否运行。目前我正在使用ForEach循环来执行此操作。然后,我可以通过一个唯一ID识别我需要运行的行。然后我将它传递给适当的子包进行处理。
我的问题是,将该标识符写入4字节变量的最简单方法是什么,以便它在解决方案级别而不是包级别上可用。就我所见,我无法将任何内容传递给子包。
感谢您的协助! -D
答案 0 :(得分:3)
参数是您将在SSIS 2012项目部署模型中寻找的内容,以允许您将数据传递到子包。在子包中,您需要添加一个参数。
我创建了5个包:MasterPackage和ChildPackages_0 ... ChildPackage4
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]。这会导致包的名称发生变化,以反映变量的值。
在我的子包中,我创建了一个名为“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.