web-dev-qa-db-ja.com

SSIS-フォルダー内のファイルをループし、パス+ファイル名を取得し、最後にパラメーターをパス+ファイル名としてストアドプロシージャを実行する方法

どんな助けも大歓迎です。 SSISパッケージを作成して、フォルダー内のファイルをループし、Path +ファイル名を取得し、最後にパラメーターをpath + filenameとして保存されたprocを実行しようとしています。パスとファイル名を取得して、ストアドプロシージャにパラメータとして挿入する方法がわかりません。参考のためにスクリーンショットを添付しました:

11
Sai

一般的に正しい考えがあり、提供されているリンク@ Speedbirt186にはいくつかの詳細が含まれているように見えますが、フローと変数に関して指摘したいニュアンスがいくつかあるようです。

Foreachループは、パス全体またはファイル名またはファイル名と拡張子を変数に割り当てることができます。後者は、パスからファイル名を分割するスクリプトタスクを追加したくない場合に最も役立ちます。 5つの変数をプロジェクトに追加することから始めると、少し簡単になります。 1はソースディレクトリパス、もう1つは宛先(アーカイブ)ディレクトリパス、1はfor各ループによって割り当てられたファイル名と拡張子を保持します。次に、ソースディレクトリとファイル名を単純に組み合わせてソースのフルパスを取得し、ファイル名を含む宛先を宛先のフルパスを取得する2つの追加の動的変数。

enter image description here

次に、データベースとExcelファイルの接続を設定してください。 Excelファイル接続を設定した後、プロパティウィンドウの[式]に移動し、[接続文字列]プロパティをSourceFullPathに設定します。これにより、ループの反復ごとにファイルパスを変更するように接続に指示します。

enter image description here

ここで、ループなどを設定するだけです。ディレクトリを設定する各ループコンテナを追加し、フィルターし、ファイル名と拡張子を選択します。

enter image description here

これで、コレクションページの式ボックスで、ディレクトリプロパティをソースディレクトリ変数のプロパティに設定します。

enter image description here

Fore各ループの最後の部分は、変数マッピングを設定して、変数にファイル名を保存することです。そのタブに移動して、ファイル名変数を選択し、インデックスを0に設定します。

enter image description here

この時点で、通常のファイルと同じようにデータフローを追加し、インポートをセットアップできます(ファイル名パラメーターのデフォルト値は、インポートする構造を持つ実際のファイルにする必要があります)。

データフローがSQL実行タスクにドロップされた後、必要に応じて設定します。ここに直接入力の例を示します。パラメーターを参照する簡単な方法は、単なる疑問符(?)です。

enter image description here

次に、次のような必要な詳細を追加して、SQLタスクでパラメーターマッピングを設定します。

enter image description here

これで、ファイルタスクに進みます。ファイルタスクをドロップし、必要に応じてセットアップしますが、移動先のファイルとソースのフルパス変数を選択して、移動するファイルをタスクに指示します。

enter image description here

これで完了です。ただし、もう1つ注意が必要です。投稿した画像で優先順位を設定する方法は、データフローからsqlおよびファイルタスクへの同時移動を示しています。ストアドプロシージャがファイルに依存している場合は、sqlタスクの後に置くことができます。ストアドプロシージャが失敗した場合でもファイルを移動する場合は、制約オプションをいつでも「完了」に変更できます。

enter image description hereenter image description here

17
Matt

あなたがしたいことは、パッケージに変数を作成し、それをFilenameのような名前にすることです。 Foreachの[編集]ウィンドウで、変数が設定されるように構成できます([変数マッピング]ページで、インデックスを0に設定します)。

変数を作成するには、変数ウィンドウを表示する必要があります。現在表示されていない場合は、[表示]メニューを使用して表示します。

その後、ストアドプロシージャを呼び出すときに、変数の現在の値をパラメーターとして渡すことができます。

このリンクは役立つかもしれません: https://www.simple-talk.com/sql/ssis/ssis-basics-introducing-the-foreach-loop-container/

4
SvenAelterman