You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SSIS脚本组件行计数中包含表头行?

SSIS统计含表头总行数的问题

需求为统计包含表头行与所有数据行的总行数,将该数值存入变量后由Script Task写入文本文件。当前在Flat File Source转换之后、Flat File Destination之前放置了Script Component,通过PostExecute方法将rowNumber存入SSIS变量;同时用Script Task生成控制文件,但统计结果比实际总行数少1(实际132行,统计显示131行),需找到准确统计含表头所有行的方法。

现有Script Component代码

public class ScriptMain : UserComponent
{
  private int rowNumber;
  public override void PreExecute()
  {
    base.PreExecute();
    rowNumber = 0;
  }

  public override void PostExecute()
  {
    base.PostExecute();
    Variables.MORTLRowCount = rowNumber;
  }

  public override void Input0_ProcessInputRow(Input0Buffer Row)
  {
    rowNumber++;
    Row.totalRows = rowNumber;
  }

}

现有Script Task代码

public void Main()
{
    int feedVersion = 200;
    string filename = 
    (string)Dts.Variables["User::MortLCurrentFilename"].Value.ToString();
    string ctlfilename = (string)Dts.Variables["User::MORTLCtlDestinationFileName"].Value.ToString() ;
    int recordCount = (int)Dts.Variables["User::MORTLRowCount"].Value ; 
    string firstline = "Filename | Feed Version | Record Count";
    string secondline = filename + "|" + feedVersion + "|" + recordCount;
    string filetext = firstline + System.Environment.NewLine + secondline;
    System.IO.File.WriteAllText(ctlfilename, filetext);

    Dts.TaskResult = (int)ScriptResults.Success;
}

问题原因与解决方法

问题根源在于:Flat File Source默认会跳过表头行,Script Component的Input0_ProcessInputRow方法仅统计了数据行数量,因此最终结果比包含表头的总行数少1。以下是三种解决方式:

方式一:Script Task中直接给统计值加1

如果确认表头固定为1行,可直接在Script Task中修改统计值:

// 替换原recordCount赋值行
int recordCount = (int)Dts.Variables["User::MORTLRowCount"].Value + 1; 

方式二:修改Script Component的初始值

将Script Component中rowNumber的初始值设为1(代表表头行),后续数据行累加后即为总行数:

// 修改PreExecute方法
public override void PreExecute()
{
  base.PreExecute();
  rowNumber = 1; // 初始值设为1,对应表头行
}

方式三:直接读取源文件总行数

若担心数据转换过程中存在行过滤等情况导致统计不准确,可直接读取源文件的总行数,在Script Task中实现:

// 替换原recordCount的赋值逻辑
string sourceFilePath = (string)Dts.Variables["User::MortLCurrentFilename"].Value;
int recordCount = System.IO.File.ReadAllLines(sourceFilePath).Length;

内容的提问来源于stack exchange,提问作者SidC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 02:52:37