元気に頑張ってください。ここにシナリオがあります。ご覧のとおり、2つのメイン列を持つテーブルがあります。
私が必要なのは、現在「アクティブ」である各「FilePath」を読み取り、そのパス内のExcelファイルを読み取ることです。したがって、お互いに少なくとも2つの「For Eachループコンテナー」が必要だと思います。私はすでにシナリオの一部を実行しました:
「SQLタスクの実行」内で、テーブルからアクティブな「FilePath」を取得し、「オブジェクト」変数(SSISの最初の変数)に入れています。
次に、SSISに2番目の変数があり、外側のループが実行されるたびに各「FilePath」の名前を保持します。
最後に、内側のループが実行されるたびに変化する3番目の変数があり、Excelファイルが含まれています。
外側のループはメタデータテーブルのアクティブな行の数まで実行する必要があり、内側のループはパス内のファイルの数まで実行する必要があります。
ポイントは、パッケージの実行後にエラーは発生しませんが、データが「OLEDB Destination」に挿入されないということです。
最初にExcelFilePath
テーブルからファイルパスをプルするときに、使用されるExcelファイルを保持するフォルダーの名前のみを返して、これらが\
(つまりC:\Excel_Exercise\Excel_Source\
)で終わっていることを確認してください。 RIGHT
/SUBSTRING
のようなT-SQL関数を使用する必要がある場合がありますが、これにより、以下に概説する方法でファイルをロードできます。また、SQL実行タスクからのSQLクエリで「アクティブな」ファイルパスのみをフィルタリングしていますか?おそらくすでにやっているので、それに応じてDelayValidation
およびValidateExternalMetadata
プロパティを設定してください。
Directory
プロパティの式を追加します。このForeachループで、(ファイル名/拡張子を含む)完全なファイルパスを保持するために使用される変数を[変数マッピング]ペインに追加します。ExcelFilePath
の式を作成し、完全なファイルパスと名前/拡張子を保持する変数を追加します。