4

SQL Server データベースの 1 つのテーブルに抽出して挿入したい、個別のフォルダーに多数のファイルが保存されています。フォルダのセットアップは次のようになります。

Folder 1  
 |--> SubFolder 1.1  
 |     |--> File 1  
 |     |--> File 2  
 |--> SubFolder 1.2  
 |     |--> File 1  
 |     |--> File 2
 |--> SubFolder 1.3  
       |--> File 1  
       |--> File 2

約 100 個のサブ フォルダーがあり、そのすべてに 2 つの.txtファイルがあり、これを抽出する必要があります。

以下に示すように構造化されたテーブルにデータをロードする必要があります

Column1         Column2     Column3     Column4     Column5     Column6  
-------------   ---------   ---------   ---------   ---------   ---------
SubFolderName   File1Col1   File1Col2   File1Col3   File1Col4   File2Col1

SSISを使用してこれを行う方法を知っている人はいますか?

4

2 に答える 2

3

で使用可能なTraverse subfoldersオプションの下にあるオプションを使用する必要があります。Foreach ループ コンテナーは、制御フロータスクで使用できます。Foreach File EnumeratorForeach Loop container

Here are few examples the illustrate the Foreach File Loop enumeration:

How To – Tasks and Transformations: Foreach File Loop

SSIS Package Containers- Part 5: Foreach Loop Containers

I hope this helps.

于 2012-11-07T15:26:52.113 に答える
2

次の手順を試すことができます。

  1. Foreach File Enumeratorおよびオプションを使用しTraverse subfolders て、ファイルを反復処理できます。 を使用してFully qualified、ファイルパスを というユーザー変数に保存する必要があることに注意してくださいIncomingFile
  2. SubFolderNameおよび と呼ばれる変数を作成できますFileName
  3. IncomingFile 変数を readonly 変数として渡し、subfolderName と FileName を ReadWriteVariable として渡します。スクリプト コンポーネントを使用して、サブフォルダー名を取得できます。

    var incomingFile = Dts.Variables["IncomingFile"].Value.ToString();
    
    FileInfo fileInfo = new FileInfo(fileFullPath);
    
    string subFolderPath = fileInfo.Directory.Name;
    string fileName = fileInfo.Name;
    
    Dts.Variables["SubFolderName"].Value = subFolderPath;
    Dts.Variables["FileName"].Value = fileName;
    
  4. ScriptComponet に接続する 2 つのデータフローをドラッグします。優先順位制約は次のように記述します[両方の評価操作は「式」にする必要があります]。

        For DataFlow 1 -> `@FileName=="Text 1"`
        For DataFlow 2 -> `@FileName=="Text 2"`
    
  5. データフロー 1 では、派生列を使用し、SubFolderName 変数を使用して例の「Column1」にマップします。「Column6」以外の他の列は、txt ファイルからマップされます。

  6. データフロー 2 で、サブフォルダー名を使用してデータを SQL サーバーにステージングします。

  7. サブフォルダー名を比較して列 6 のテーブルを更新するストアド プロシージャを記述します。

  8. SQL Execute taskストアド プロシージャを実行するために使用します。

パッケージは次のようになります。

ここに画像の説明を入力

お役に立てれば!

于 2012-11-08T12:18:55.913 に答える