web-dev-qa-db-ja.com

SQL Server Integration Services(New Senario)を使用して複数のExcelファイルからデータを読み取る方法

元気に頑張ってください。ここにシナリオがあります。ご覧のとおり、2つのメイン列を持つテーブルがあります。 enter image description here

私が必要なのは、現在「アクティブ」である各「FilePath」を読み取り、そのパス内のExcelファイルを読み取ることです。したがって、お互いに少なくとも2つの「For Eachループコンテナー」が必要だと思います。私はすでにシナリオの一部を実行しました: enter image description here

「SQLタスクの実行」内で、テーブルからアクティブな「FilePath」を取得し、「オブジェクト」変数(SSISの最初の変数)に入れています。

次に、SSISに2番目の変数があり、外側のループが実行されるたびに各「FilePath」の名前を保持します。

最後に、内側のループが実行されるたびに変化する3番目の変数があり、Excelファイルが含まれています。

外側のループはメタデータテーブルのアクティブな行の数まで実行する必要があり、内側のループはパス内のファイルの数まで実行する必要があります。

ポイントは、パッケージの実行後にエラーは発生しませんが、データが「OLEDB Destination」に挿入されないということです。

1
user157749

最初にExcelFilePathテーブルからファイルパスをプルするときに、使用されるExcelファイルを保持するフォルダーの名前のみを返して、これらが\(つまりC:\Excel_Exercise\Excel_Source\)で終わっていることを確認してください。 RIGHT/SUBSTRINGのようなT-SQL関数を使用する必要がある場合がありますが、これにより、以下に概説する方法でファイルをロードできます。また、SQL実行タスクからのSQLクエリで「アクティブな」ファイルパスのみをフィルタリングしていますか?おそらくすでにやっているので、それに応じてDelayValidationおよびValidateExternalMetadataプロパティを設定してください。

  • 最初のForeachループはForeach ADO Enumerator using the Execute SQL Taskからのオブジェクト変数をソース変数として使用します。VariableMappingsペインで、ファイルディレクトリを保持する文字列変数を追加しますインデックス0。
  • 最初のForeachループ内で、別のForeachループをForeachファイル列挙子として追加します。コレクションペインで、ディレクトリの外部Foreachループからの文字列変数を使用するDirectoryプロパティの式を追加します。このForeachループで、(ファイル名/拡張子を含む)完全なファイルパスを保持するために使用される変数を[変数マッピング]ペインに追加します。
  • このForeachループ内に、Excelソースから目的の宛先にロードするデータフロータスクを追加します。 Excelソースの接続マネージャーで、ExcelFilePathの式を作成し、完全なファイルパスと名前/拡張子を保持する変数を追加します。
0
userfl89