2017-01-04 14 views
0

データベースT1にテーブルT1のデータがあります。SSIS宛先のパラメータを使用してあるDBから別のDBにエクスポート

データベースDB2のテーブルT2に移動する必要があるのは、フィールドF1が特定の値に等しいT1の行だけです。

これらの値は、データベースDB2のテーブルTCにあります。 DB1はDB2を参照することはできません。したがって、私のdtsxのDataFlowコンポーネントでは、T1とTC間の結合でクエリを書くことができません。

私は2つの可能なパスを参照してください。私は最初のT2

  • それらを注ぐ代わりに取得するSQLクエリを持つ前にdtsxでそれらをフィルタリングし、その後T1からすべての行をインポートすることができ

    1. をDB1からのデータは、テーブル値のあるパラメータを受け入れるDB1のストアドプロシージャを書き込むことができました。その後、私のパラメータ(例では1,2,4)をTVPに入れて呼び出すことができますこのストアドプロシージャ。

    私はこのような種類のテーブルをインポートする必要があります。したがって、ソリューション2は実際にはあまりに複雑すぎて複雑なようです。ソリューション1は、まずすべてをインポートしてから、インポートされたものの一部を破棄して、あまりにも無駄な作業を行うようです。

    この場合、ベストプラクティスまたはスマートなトリックがありますか?

    ありがとうございます

  • 答えて

    1

    マージジョインを使用して、フィールドF1のT1とTcのデータを結合できます。したがって、2つのデータソース、1つはT1、もう1つはTCです。パラメータはまだ適用されていません。マージ結合が機能するためには、ソートコンポーネントを使用して両方の結果セットの結合フィールド(F1)をソートする必要があります。次に、マージ結合コンポーネントで結合タイプ(内部)を定義します。これは、TCからのパラメータがT1に適用されるため、内部結合を使用してパラメータを適用します。最後に結果をT2にエクスポートします。

    enter image description here

    もう一つの方法は、単に、あなたがT2に結果を挿入し、その後、F1のTCとT2_tempに参加するためにクエリを使用することができ、T2_tempそれを呼び出す、DB2にT1から一時テーブルにすべてをインポートしています。

    +0

    あなたの提案に感謝します。基本的には私のソリューションナンバー1でやりたかったようです。私に疑念を抱かせるのは、多くのデータが最初に読み込まれて破棄されるということです。あなたのソリューションでは、大部分のデータがDB1からDB2に移動するのか、それとも最初にフィルタリングされるのかを知りたいのですが?私はまだ最終的なアーキテクチャはわかりませんが、SSISサーバーは第3の物理マシン(SRV3)にあると言います。また、フィルタを適用すると大部分のデータが削除されるとします。 –

    +0

    [続き]もちろん、私は1台のサーバーから他のサーバーへのデータ移動量を最小限に抑えたいと思います。@ thotwielder:あなたのソリューションはDB1からSRV3へのすべてのデータを移動しますか?または、大量のデータがDB1からSRV3に移動するのを防ぐフィルタリングですか? thx –

    +0

    データ・フィルタリングはマージ・ジョインに含まれているため、DB2ではなく(DB2とSSISが同じサーバー上で実行されていない場合)あなたのssisが実行されている場所で実行されています。したがって、DB2は最終結果セットのみを受け取ります。フィルタリング(マージジョイン)はどこかで起きているはずですので、あなたのケースではssisが実行されているSRV3にあります。 – thotwielder

    関連する問題