異なるサーバー (リンクではない) の 2 つのデータベースからデータを取得する必要がある SSIS アプリケーションがあります。2 つのデータベース間で一致する名前と DOB レコードを取得し、その結果を使用してテーブルを挿入/更新する必要があります。私の最初のアプローチは、OLE DB ソースを使用してから Merge Join し、結果をレコードセットに入れることです。次に、制御フローで、レコードセットの結果を使用してテーブルを挿入/更新します。しかし、制御フローでレコードセットが表示されません。別の解決策は、一時テーブルを作成することです。ただし、一時テーブルは各サーバーの tempdb データベースに存在するため、表示されません。この問題に対するより良いアプローチは何ですか?
2 に答える
この場合、作業テーブル用にデータベースを保持するか、それらの作業テーブル用のスキーマを作成します。
次に、中間結果を保持するテーブルを切り捨てる SQL 制御フロー タスクを追加します。この後、中間結果セットをテーブルにロードし、操作を実行し、オプションでテーブルを再度切り捨てます。
レコードセットの宛先は、小さなデータセットの場合に適しています。ただし、メモリに収まらない大規模なデータセットに使用する場合は、非常に遅くなります。
ワークスペースとして機能するデータベース/スキーマがない場合は、RAW ファイルを使用して中間結果を保持できます。それらも非常に高速です。
とはどういう意味put the results to recordset
ですか?
結合を使用してデータ フロー上の 2 つのソースを結合する場合、結合上のその "レコードセット" は、現在のデータフロー中にのみ使用できます。データフローが終了した後の制御フローでは使用できません。
宛先DBに結果セットを挿入できないのはなぜですか? 同じデータ フローで他の変換操作を実行し、その結果を変換先データベースに挿入できます。
または、データを挿入する前に制御フローでのみ実行できる何かを本当に実行する必要がある場合は、はい、oleDBDestination を使用して宛先の一時テーブルにレコードセットを挿入し、別のデータフローにアクセスできます (非常に良いアプローチですが)