0

ソース テーブルに 4 つの列があります。

ソース テーブル: 列 1、列 2、列 3、列 4

ソース テーブルの 4 つの列のうち、2 つの列だけを宛先テーブルに挿入したいと考えています。

宛先テーブル : 列 A と列 B があります

列Aと列Bに値を挿入するには、SSISパッケージで注文操作を実行したいと考えています。

だから私は SSIS にオーダーロジックを持ちたいと思っています。

列 1 に値がある場合は、それを宛先列 A で使用し、列 1 の値を列 A に挿入します。したがって、列 1 に値がある場合、宛先テーブルの列 A が挿入されます。

列 1 に値がない場合は、ソース テーブルの列 2 を確認し、列 2 に値がある場合は、その値を列 A に挿入します。

ここで、列 1 が null で、列 2 に値があったとします。列 2 の値は、宛先テーブルの列 A に挿入されます。

次に、ソースの列 3 を確認し、値があるかどうかを確認します。値がある場合は、その値を宛先テーブルの列 B に挿入します。列 3 に値がない場合は、ソースから列 4 を確認してください。

したがって、基本的には、これらの 4 つの列 (指定されている) と最初に出くわした値をチェックインし、それを目的の列 A と列 B で使用します。

トリッキーな部分があるので、最初の null でない値が宛先列 A に入り、2 番目の null でない値が 2 番目の宛先列 B に入ります。

これは SQL で実行できると思いますが、SSIS パッケージで実行したいと考えています。

私は本当にあなたの助けに感謝します. 前もって感謝します。

4

1 に答える 1

0

おそらく派生列を介してこれを機能させることができますが、面倒になります。このようなものは、スクリプト コンポーネントでより適切に表現できます。

スクリプト コンポーネントを変換としてデータ フローに追加します。[入力行] タブで、列 1 ~ 4 を読み取り専用として選択します。[出力] タブで、2 つの新しい列を出力バッファーに列 A と列 B として追加し、列 1 ~ 4 と一致するようにデータ型を設定してください。[全般] タブに戻り、[スクリプト] をクリックします。

メソッド内で、ProcessInputRowA と B に割り当てられるものを計算する必要があります。次のコードは概算です。元の状態が必要な場合は、コメントしてください。PC を使用しているときに修正します。

int firstNonNull = 0;
string colA = string.Empty;
string colB = string.Empty;

// Assign a value for colA and remember
// where we found it
if (!Row.Col1_IsNull)
{
    firstNonNull = 1;
    colA = Row.Col1;
}
else if (!Row.Col2_IsNull)
{
    firstNonNull = 2;
    colA = Row.Col2;
}
// Question does not address whether we will find
// non null values in 2 columns exactly
// assuming not
else if (!Row.Col3_IsNull)
{
    firstNonNull = 3;
    colA = Row.Col3;
}
else if (!Row.Col4_IsNull)
{
    firstNonNull = 4;
    colA = Row.Col4;
}

// Now to assign a value for B
// Assume that the next column after the first non null is populated
// otherwise, repeat above process
switch (firstnonNull)
{
    case 1:
        colB = Row.Col2;
        break;
    case 2:
        colB = Row.Col3;
        break;
    case 3:
        colB = Row.Col4;
        break;
    // Now what?

}

より賢い人なら、すべての値を List などにポップしてから、最初の 2 つの空でない値を見つけるか、または他の方法で見つけることができたかもしれませんが、これは保守にとって非常に簡単です。

于 2013-09-17T04:08:56.337 に答える