1

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

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

感谢协助!-D

4

1 回答 1

3

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

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

主包

在此处输入图像描述

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

添加一个 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.
于 2013-07-16T12:21:03.300 回答