11 モデルケース10「フォルダ内のCSVファイルをまとめてAccessへ転送する」

モデルケース9で使った「Foreachループコンテナ」モデルケース4「CSVファイルのデータをAccessに転送する」のフローを組み合わせて、あらかじめフルパスで指定された単一のCSVファイルではなく、指定フォルダ内にある任意の名前・任意の数のすべてのCSVファイルをループ処理でAccessのテーブルへと転送する例です。

ここではモデルケース4の「Case04.dtsx」をコピーしそれをアレンジする手順で説明します。またCSVファイルもモデルケース4と同じ「商品.csv」を別名で複数コピーし同じフォルダに配置、それぞれ適当な別々のデータを保存しておきます。




  1. ソリューションエクスプローラ上で「Case04.dtsx」をコピーして貼り付け、「Case10.dtsx」という名前に変更して開きます。


  2. ツールボックスより、「Foreachループコンテナ」を選択してデザイナ上にドラッグ&ドロップします。


  3. 「Foreachループコンテナ」のボックスの中に「データフロータスク」を移動します。


  4. 「Foreachループコンテナ」をダブルクリックして「Foreachループエディタ」ダイアログを開きます。


  5. 画面を「コレクション」に切り替えます。
    このとき、デフォルトで「Enumerator」プロパティには「Foreach File 列挙子」という項目が指定されています。これが、ディスク上のファイルを検索し見つかったファイル名をループで順番に取り出して使うという設定になります。


  6. この画面で、検索するフォルダ、対象ファイルのワイルドカード(*.*や*.CSVなど)、取り出して使うファイル情報(フルパスやファイル名+拡張子のみなど)、サブフォルダまで検索するかどうかなどを設定します。


  7. 次に画面を「変数のマッピング」に切り替えます。そして表の「変数」欄の[▼]ボタンをクリックして「<新しい変数>」を選択します。


  8. 「変数の追加」ダイアログが開いたら、任意の変数名を指定します。ここでは「CSVFileName」としました。
    この設定によって、「Foreachループコンテナ」による指定フォルダ内の検索で見つかったファイル名がひとつずつ順番にこの変数に代入されることになります。他の処理では、この変数の内容を取得することによって、各々のファイルをループ処理できるようになります。


  9. [OK]ボタンをクリックしてダイアログで閉じるとマッピングの情報が表示されます。確認して[OK]ボタンをクリックし、「Foreachループエディタ」ダイアログを閉じます。


  10. 次に、「接続マネージャ」のタブにおいて、CSVファイルへの接続を定義した接続マネージャをクリックして選択状態にします。


  11. その状態で、SSISデザイナのプロパティウィンドウから「Expressions」欄の右端にある[...]ボタンをクリックし、「プロパティ式エディタ」ダイアログを開きます。


  12. 「プロパティ式エディタ」ダイアログではまず、「プロパティ」欄で[▼]ボタンをクリックし、ドロップダウンリストの中から「ConnectionString」を選択します。このプロパティは、その接続マネージャがどのファイルに接続するかを設定するものです(モデルケース4では固定の単一ファイルを指していました)。


  13. 次に「式」の欄の右端にある[...]ボタンをクリックして「式ビルダ」ダイアログを開きます。

  14. そして、「変数」のノードの中から先ほど設定したユーザー変数「User::CSVFileName」を見つけて、それを画面下の「式」の欄にドラッグ&ドロップします。


  15. 「式ビルダ」ダイアログで[OK]ボタンをクリックしたあと、「プロパティ式エディタ」ダイアログにその設定が反映されていることを確認して、[OK]ボタンをクリックします。


  16. 以上の設定によって、『所定のファイルを検索→見つかったファイル名を変数に代入→その変数を使って接続マネージャの接続先を順次切り替え』というループ処理ができましたので、パッケージを実行してみます。


| Index | Prev | Next |

 

Copyright © T'sWare All rights reserved