文件夹中所有文件的SSIS行计数

时间:2016-01-13 16:14:40

标签: ssis rowcount foreach-loop-container

我有一个文件夹,其中包含每天更换的多个Excel文件。我需要一个总行数,它给出了文件夹中每个单独Excel文件的行数总和(即如果有3个文件,每个文件有10个记录,我需要结果数为30)。然后,我需要每天运行此程序包,将单个记录添加到日志表中,该日志表将为我提供文件夹中的每日记录数。我一直在尝试Foreach Loop容器和ADO枚举器,但似乎无法实现解决方案。

2 个答案:

答案 0 :(得分:1)

有一个很好的解决方案,您无需使用任何脚本任务即可应用。您需要使用的只是“Foreach循环容器”,“数据流任务”和“执​​行SQL任务”

定义变量:

  • V_FilesPath-> (字符串)将保留文件所在的路径
  • V_FileName-> (字符串)将使用Foreach容器中的文件名填充
  • V_RowCount(Int)
  • V_FileRowCount(int)
  • V_TotalRecords(int)

定义Foreach:

Package Mock up

Foreach Definition

将源文件映射到RowCount组件并选择变量: V_FileRowCount Source Definition

“执行SQL任务”中,将结果集更改为“单行” SQL Task Definition

将ResultSet映射到以下变量: enter image description here

“执行SQL任务”的表达式部分中选择以下属性表达式: enter image description here

在Expression Pane中发出以下内容:

  

“SELECT”+(DT_STR,10,1252)@ [User :: V_TotalRecords] +“+”+(DT_STR,10,1252)@ [User :: V_FileRowCount] +“,1 +”+(DT_STR, 10,1252)@ [User :: V_RowCount]

完成上述操作后,您就完成了!

如果您希望查看结果,请添加脚本任务(仅显示结果)

Script task definition

并粘贴以下脚本代码而不是“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);

    }
}

答案 1 :(得分:0)

您可以使用行数组件。

在控制流中创建数据流任务。然后,在数据流内部,使用连接到行计数组件的Excel源组件。创建一个整数变量,双击Row Count组件并将变量赋给它。

如果您正确配置了Excel源(使用Excel连接管理器),则您创建的变量将保存您传递的Excel文件中的行数。

enter image description here