【问题标题】:SSIS Row Count For All Files Within a Folder文件夹中所有文件的 SSIS 行计数
【发布时间】:2016-01-13 16:14:40
【问题描述】:

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

【问题讨论】:

  • 您可以通过使用互操作来查看 Excel 文件的脚本任务来完成。
  • 感谢@TabAlleman 的回复。我是脚本任务的新手,以前没有使用过互操作。您能否详细说明如何使用它或向我指出有用的资源?
  • 不,很遗憾我手头没有任何东西。我能做的最好的就是把这些关键词给谷歌。
  • 嗨,亚历克斯。除了@TabAlleman 的输入,我还推荐使用必应。

标签: ssis rowcount foreach-loop-container


【解决方案1】:

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

定义变量:

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

定义 Foreach:

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

“执行 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);

    }
}

【讨论】:

    【解决方案2】:

    您可以使用行数组件。

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

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

    【讨论】:

      猜你喜欢
      • 2019-08-12
      • 1970-01-01
      • 1970-01-01
      • 2021-05-29
      • 2020-02-03
      • 1970-01-01
      • 1970-01-01
      • 2021-01-08
      • 2011-01-29
      相关资源
      最近更新 更多