在每个循环容器中使用的各种文件的行数

时间:2019-03-08 09:13:50

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

我在数据流任务中进行了行计数转换,并且此数据流任务位于“每个循环”容器中。因此,当我运行该程序包时,我只会得到一个文件的行数,而不是所有文件的行数。有人可以帮助我吗

2 个答案:

答案 0 :(得分:1)

您可以使用脚本任务来执行此操作。首先创建另一个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;

答案 1 :(得分:1)

使用表情任务

  

Expression Task使用Expression Builder创建并评估在运行时设置变量值的表达式

在您的sis软件包中添加2个变量:

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

在Foreach循环容器内添加具有以下表达式的 Expression Task

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

参考