2016-11-30 5 views
-1

異なるSQLソースサーバー(Server1、Server2、Server3)などから動的データプルを構築したいのですがforeachループを使用して複数のSQL Serverから複数のSQL ServerからDynamic Datapullをビルドする方法

表がドロップされたと私は私確信しているように、パッケージが実行されるたびに再作成されますデータベース(DATABASE1、データベース2、など)に私のSQLサーバー(DEV、製品版)に動的な場所に

をプルダウンする

ソース上で何かが変更された場合(ソース名、データ型、長さなど)、ソースサーバーと一致します。

抽出するデータ私はforeach loopで単一のデータフローを使用してこれをプルダウンしたいと思います。

私はなど、server5.database3.table_yserver1.database1.table_x(その内のすべてのサーバー名とテーブルとデータベースを持つテーブルを持っていると

私はそのテーブルをループしたいと内部の私のサーバーまでのテーブルのすべての行を引っ張ります)各テーブルの新しいデータフローを構築する必要はありません。

これを行うために、私はすでにオブジェクトに結果をダンプしているSQLタスクでforeachループを構築しました。その後、foreachループは、7つの異なるフィールド(Source_Server_Name,Source_Server_Type_DriverSource_DatabaseSource_TableSource_Where_ClauseSource_Connection_String、宛先のもの)を持つオブジェクトを取得し、ループ内で使用するためにこれらの各フィールドを別のString変数に置きます。

私は、変数を使用して動的に接続を変更することができますが、私は、関数にデータフロー内の列のマッピングを取得する方法を見つけ出すことができない、

は、私はバックエンドを編集するために使用できるスクリプトタスクのいくつかの種類ありますメタデータがエラーにならないように、私のための列マッピングを作成するXML?どんな助けでも大いに感謝されます:-)

これは私が私のサーバーにプルダウンする各テーブルのための異なるメタデータセットアップを持っている必要があることを覚えていることがわかります。

http://sql-bi-dev.blogspot.com/2010/07/dynamic-database-connection-using-ssis.html

+0

SSISはこのように動作しません。データフロータスクのメタデータは作成時にバインドされ、実行時には設定できません。ただし、[Biml](http://billfellows.blogspot.com/2015/01/biml-replicate-o-matic.html)を使用して、これらのデータフロータスクのすべての生成をスクリプト化することはできますが、それはかなり簡単です – billinkc

+0

私は許可されていません現在の作業環境でBIMLを使用します。スクリプトタスクを使用して、新しいSSISパッケージを作成できます。ここでは、基本的にスクリプトでXMLを作成し、そのSSISパッケージを実行します。その後、そのパッケージを作成した後、そのパッケージを削除し、ループ内の次のテーブルに移動して、そのスクリプトタスクの新しいパッケージを作成して実行/削除する別の手順がありますか? –

+0

または、タスクを実行するために必要な変数を使用してSQL Serverオブジェクト転送タスクを使用しますか? –

答えて

-1

は、私は動的に生成し、パッケージを発行することが可能であることを聞いたことがあるが、私はこのルートを行くことはありません。私は、SQLのエージェントを介して、またはSSISのパッケージスクリプトタスクの内部からアプリケーションから実行できるC#コードを使用して、同様のことを行ってきました。

この方法を試してみると、SqlConnectionとSqlCommandがあります。次に、SQL文を動的に構築するためのコードを記述します。

たとえばExecuteNonQuery()を使用してテーブルステートメントを作成し、datareaderを使用して入力をパイプし、そのリーダーをSqlBulkCopyに渡して宛先に書き込みます。

0

私が解決したソリューションは、動的SQLとBIMLを使用してオンザフライでパッケージを生成するBIMLです。かわいいですが動作します:-)

関連する問題