2016-12-12 11 views
1

同じデータベースの複数のインスタンスを含むDBサーバーがあります。すべてのデータベースが列挙される(例えば、MyDB001〜MyDB006)。すべてのインスタンスに同じテーブルがあります。ソーステーブルを使用したSSISのループ

レポートの目的で、これらのすべてのDBを単一のDBに抽出したいと考えています。

現在の解決策は、SSISに複数の接続を設定することです。各DBごとに1つの専用接続があります。また、DBごとにテーブルを抽出するデータフローがあります。これは、抽出を変更する必要がある場合、複数のデータフローを変更することにつながります。

データベースをループするスマートな方法はありますか?例えば。パラメータを使用してDBへの接続を取得し、このパラメータ化された接続を使用してデータを取得する1つのデータフローを持ちますか?

あらかじめご了承ください。

SillyWalker

答えて

0

はいできます。ソースと宛先を持つデータフローから始めます。コントロールフローの背景をクリックし、プロパティを変更し、機密情報を保存しないように保護レベルを変更します。

ソース接続、プロパティをクリックし、接続文字列をコピーしてテキストエディタに貼り付けます。まだプロパティ、式、クリックして...プロパティ式のエディタでプロパティドロップボックスから接続文字列を選択すると、接続文字列を定義し、必要なデータベースをポイントして、接続文字列以前にテキストエディタに保存され、それに応じて変更されます。必要なデータベースに変更します。

上記の意味を理解し、接続文字列式を任意のソーステーブルを指すように変更できるようになるまで、それを試してください。これを理解した後、ループ部分を開始することができます。 2つの変数を追加します.1つはcs(タイプ文字列)、これは動的データベース接続文字列、2つ目はrs(タイプオブジェクト)です。これはデータベース接続の集合を保持します。制御フローでは、execute SQLタスク、foreachループコンテナ、connect SQLタスクをコンテナに追加し、データフローをコンテナにドラッグアンドドロップします。実行SQLタスクを開き、一般的なタブで、sqlstatement、データベース接続のコレクションを定義します :select val from tabl(talはすべてのデータベース接続を列valに格納します)。結果セットで、「完全な結果セット」を選択します。結果セットタブで結果名を0に、変数を変数rsに変更します。これにより、データベース接続文字列のコレクションが変数rsにマップされます。

次に、foreachループコンテナをダブルクリックして編集します。コレクションタブでForeach ADO列挙型を選択し、ADOオブジェクトソース変数で変数rs.In変数マッピングタブを選択し、変数でcsを選択します。インデックスは0にする必要があります。

データフローで、式では、接続文字列を変数csに設定します。テストして楽しんでください。

全体像:

enter image description here

関連する問題