0

完了する必要がある複雑なタスクがあります。以前はファイルが 1 つしかなかったので問題なく機能していましたが、現在は変更されています。各ファイルには、最初にステージング テーブルに一括挿入される 1 つの長い行があります。ここから、ファイル名を別のテーブルに保存し、ステージング テーブル データの分割された部分を挿入することになっています。これは問題ではありません。一度にロードするファイルが 1 つだけの場合もあれば、複数のファイルがある場合もあります。起こる必要があるのはこれです:

  1. 最初の SSIS タスクは、いくつかのチェックを行うスクリプト タスクです。2 番目のタスクでは、ファイル リストを準備します。
  2. ステージング テーブルが切り捨てられます。
  3. 3 番目のタスクは現在、ファイル リストのファイルを使用して処理する Foreach ループ コンテナー タスクです。
    • ファイルは一括挿入タスクを使用してテーブルにロードされます。
    • ファイル名は変数として次のプロセスに渡す必要があります。これは以前は C# タスクで実行されていましたが、複数のファイルが存在する可能性があり、各ファイル名を個別に保存する必要があるため、現在は少し複雑になっています。
    • 最後のタスクは、ファイル名を入力変数としてストアド プロシージャを実行する SQL タスクです。

私の問題は、以前は1つのファイルしかなかったことです。これは簡単でした。今、それについて最善の方法は何ですか?

4

3 に答える 3

1
  1. ファイルをインポートするデータ フロー タスクで、派生列を作成します。ファイル名のシステム変数値を入力します。ファイル名を同じテーブルにロードします。

  2. SQL 実行タスクを使用して、ファイル名の個別のリストをレコードセット (オブジェクト型変数) に取得します。

  3. For Each ループ コンテナーを使用して、レコードセットをループします。コンテナ内にコードを配置します。コードはループからファイル名を変数の値として受け取り、ファイルを処理します。

  4. For Each ループ コンテナーで SQL 実行タスクを使用して SP を呼び出します。次のようにファイル名をパラメーターとして渡します。

    Exec sp_MyCode param1、param2、?

どこ ?filename INPUT を文字列として渡します

編集

変数で指定されたファイルを取得するようにフラット ファイル接続を作成するには、フラット ファイル接続の接続文字列プロパティを使用します。

  1. [FF 接続] を選択し、右クリックして [プロパティ] を選択します。

  2. Expressions の空のフィールドをクリックし、表示される省略記号をクリックします。式を使用すると、そこにリストされているオブジェクトのすべてのプロパティを変数を使用して定義できます。SSIS の多くのオブジェクトには、式を指定できます。

  3. 式を追加し、[接続文字列プロパティ] を選択して、ファイルへの絶対パスを使用して式を定義します (念のため、UNC パスでもかまいません)。

于 2013-06-05T13:21:16.893 に答える
0

ステージング テーブルに列を追加します - FileName SSIS 変数でファイル名をキャプチャし (式を使用)、ループごとに次のようなものを実行します。

UPDATE StagingTable SET FileName=? WHERE FileName IS NULL

なぜあなたはC#をいじっていますか?あなたの説明から、それはまったく不要です。

于 2013-06-05T23:17:19.120 に答える