5

毎日置き換えられる複数の Excel ファイルを含むフォルダーがあります。フォルダ内の個々の Excel ファイルの行数の合計を示す合計行数が必要です (つまり、それぞれ 10 レコードのファイルが 3 つある場合、結果数は 30 が必要です)。次に、このパッケージを毎日実行して、個々のレコードをログ テーブルに追加し、フォルダー内の毎日のレコード数を提供する必要があります。Foreach ループ コンテナーと ADO 列挙子を試してみましたが、解決策が得られないようです。

4

2 に答える 2

1

スクリプト タスクを使用せずに適用できる優れたソリューションがあります。使用する必要があるのは、「Foreach ループ コンテナー」、「データ フロー タスク」、および「SQL 実行タスク」だけです。

変数の定義:

  • V_FilesPath-> (文字列) ファイルが配置されているパスを保持します
  • V_FileName-> (文字列) には、Foreach コンテナー内のファイル名が入力されます。
  • V_RowCount (整数)
  • V_FileRowCount (整数)
  • V_TotalRecords (整数)

Foreach を定義します。

パッケージのモックアップ

Foreach の定義

ソース ファイルを RowCount コンポーネントにマップし、変数V_FileRowCountを選択します。 ソース定義

SQL 実行タスク」で、結果セットを「単一行」に変更します。 SQL タスク定義

ResultSet を次の変数にマップします。 ここに画像の説明を入力

「SQL 実行タスク」部分で、次のプロパティ式を選択します。 ここに画像の説明を入力

式ペインで、次を発行します。

" SELECT " + (DT_STR,10,1252)@[User::V_TotalRecords] + " + " + (DT_STR,10,1252) @[User::V_FileRowCount] + ", 1 + " +(DT_STR,10,1252 ) @[ユーザー::V_RowCount]

上記をクリアしたら完成!

結果を確認したい場合は、スクリプト タスクを追加します (結果を表示するためだけに)

スクリプト タスクの定義

「Public Void Main」で始まる部分の代わりに、次のスクリプト コードを貼り付けます。

        public void Main()
{

    try
    {

        string Variables = "Loop Counter: " + Dts.Variables["User::V_RowCount"].Value.ToString() + "                       Total Records in all files: " + Dts.Variables["User::V_TotalRecords"].Value.ToString();
        MessageBox.Show(Variables).ToString();

    }



    catch (Exception Ex)
    {

        MessageBox.Show(Ex.Message);

    }
}
于 2016-12-18T19:55:55.347 に答える