1

子パッケージにデータを渡そうとすると問題が発生します。私の親パッケージはデータベースを介して実行され、実行するかどうかを別のパッケージと照合してチェックします。現在、私はそうするために ForEach ループを使用しています。次に、実行する必要がある行を 1 つの一意の ID で識別できます。次に、それを適切な子パッケージに渡して処理します。

私の質問は、パッケージ レベルではなくソリューション レベルで使用できるように、その識別子を 4 バイト変数に書き込む最も簡単な方法は何かということです。私が見た限り、子パッケージには何も渡すことができません。

助けてくれてありがとう!-D

4

1 に答える 1

3

パラメーターは、子パッケージにデータを渡すことができるようにするために、SSIS 2012 のプロジェクト配置モデルで探しているものです。子パッケージでは、パラメーターを追加する必要があります。

MasterPackage と ChildPackages_0 ... ChildPackage4 の 5 つのパッケージを作成しました。

マスターパッケージ

ここに画像の説明を入力

MasterPackage には、「Variable」(Int32) と「ChildPackage」の 2 つの変数が定義されています。ChildPackage (文字列) には適用された式が"ChildPackage_" + (dt_wstr,1) @[User::Variable] + ".dtsx"あります Variable の値が変化すると、この文字列も変化します。

Foreach ループ (Item 列挙子、0 から 4 まで) を追加し、現在の値を不適切な名前の変数 "Variable" にマップします。

パッケージを実行するパッケージ実行タスクを定義しました。[パラメーター バインド] タブで、"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 に答える