1

同じクエリを使用する2つのssisパッケージがあり(package1とpackage2のクエリにわずかな違いがあります)、2つの抽出sample1.csv と sample2.csv を提供します。

このシナリオでは、2 つのパッケージを使用する代わりに、1 つのパッケージのみを使用して抽出を並行して取得したいと考えています。

シングルジョブで、sample1.csvとsample2.csvを一度に抽出したい。

両方のパッケージで、sql タスクの実行で一時テーブルを使用したため、データフロー タスクでは、スクリプト コンポーネントを使用して列名とデータを取得しました。

サンプルのクエリ結果出力を添付しましたPackage1 出力の抜粋

Package2 出力の抜粋

画像 1 は、package1 で使用したクエリ結果を示しています。画像 2 は、package2 で使用したクエリ結果を示しています。

4

1 に答える 1

0

私も似たような状況です。解決策は次のとおりです。

  1. ID 列、Query 列、Destination 列を含む SQL Server にテーブル ("Run") を作成します。
  2. 「実行」ごとに (つまり、既存のパッケージごとに) 1 つのレコードを作成し、クエリ列にさまざまなクエリを入力します。
  3. SQL 実行タスクを含む親パッケージを作成して実行テーブルをクエリし、必要なすべてのクエリを返し、出力をオブジェクト変数に入れます。
  4. for each 列挙子を追加して、返されたレコードをループし、Query 列を Query 変数に、Destination 列を Destination 変数にマッピングします。
  5. for each 列挙子内に、既存の「子」パッケージを指すパッケージ実行タスクを追加します。
  6. 子パッケージで、別のクエリ変数を追加し、パッケージ構成をセットアップして、親のクエリ変数を取得します。宛先についても同じことを行います
  7. 子パッケージのデータ ソースを修正して、変数から sql コマンドを使用し、クエリ変数を指すようにします。
  8. 宛先変数を使用してファイルパス/名前を構築する式を使用するように、子パッケージの宛先で使用されるファイル マネージャーを修正します。

これは、各クエリが同じデータ型とデータ長でまったく同じ数の列を返す場合にのみ機能することに注意してください。そうしないと、あらゆる種類のメタデータ エラーが発生します。

これは、SQL Server データベースにストアド プロシージャまたはユーザー定義関数を作成してクエリを一元化し、Run テーブルに詳細なパラメーターを格納するだけで改善できます。

于 2012-07-25T14:59:30.537 に答える