【问题标题】:Row Count of various files with in a For Each Loop ContainerFor Each 循环容器中各种文件的行数
【发布时间】:2019-03-08 09:13:50
【问题描述】:

我在数据流任务中有一个行计数转换,这个数据流任务位于 For Each 循环容器中。所以当我运行包时,我只得到一个文件而不是所有文件的行数。谁能帮我解决这个问题

【问题讨论】:

  • 您想要每个文件的行数,还是所有文件的总行数?
  • 所有文件的所有行的总和。
  • 您可以为此目的使用表达式任务,我认为比使用脚本任务更推荐,因为您只是在增加一个变量,您没有任何复杂的逻辑要实现

标签: sql-server ssis etl foreach-loop-container dataflowtask


【解决方案1】:

使用表达式任务

表达式任务使用表达式生成器创建和评估在运行时设置变量值的表达式

将 2 个变量添加到您的 ssis 包中:

  • @[User::TotalRowCount]: 存储总数
  • @[User::RowCount]: 用于行计数转换

在 Foreach 循环容器内添加一个表达式任务,表达式如下:

@[User::TotalRowCount] = @[User::TotalRowCount] + @[User::RowCount]

参考文献

【讨论】:

    【解决方案2】:

    您可以使用脚本任务来执行此操作。首先创建另一个 SSIS 变量,该变量将存储 Foreach 循环的所有迭代的总数。在此之后,在循环内的数据流任务之后放置一个脚本任务。将保存每次迭代的行计数的变量添加为ReadOnlyVariable,并将用于存储所有迭代总计数的变量添加到ReadWriteVariables 字段中。以下示例使用 C# 来更新总行数变量 (TotalCount) 的值,方法是将当前迭代 (CurrentInterationCount) 中保存此变量的行数添加到该变量中。

    int currentRows = Convert.ToInt32(Dts.Variables["User::CurrentInterationCount"].Value.ToString());
    int totalRows = Convert.ToInt32(Dts.Variables["User::TotalCount"].Value.ToString());
    
    Dts.Variables["User::TotalCount"].Value = currentRows + totalRows;
    

    【讨论】:

      猜你喜欢
      • 2015-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多