【问题标题】:SSIS Script Task get row count of csv filesSSIS脚本任务获取csv文件的行数
【发布时间】:2020-11-16 19:10:40
【问题描述】:

我正在使用 VS 2012 \ SQL SSIS。如何检索 csv 文件中记录的行数并将它们分配给变量 (RowCount) 以供稍后在流程中使用?我还需要从计数中排除 1,因为这将是列标题。

但是,我不能只使用数据流任务、OLE 源然后是行数,因为我不知道文件名(或 csv 的标题)。我所知道的是至少会有行标题。到目前为止,我有一个 FOR EACH LOOP 容器,它查看特定文件夹,然后将文件名分配给变量“FileNameFound”。如何配置脚本任务,然后将 RowCount 分配给变量“RowCount”?

到目前为止,在我的脚本任务 (C#) 中,我已经尝试了以下内容,只是为了使用消息框进行测试

public void main()
{
        string strPath = Dts.Variables["FileNameFound"].Value.ToString();
        string[] strArr = File.ReadAllLines(strPath);
        //MessageBox.Show(strArr[0]);
        MessageBox.Show("Total Records " + strArr.Length.ToString());

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

如何将计数的记录分配给 SSIS 变量“RowCount”?

【问题讨论】:

  • 在您的脚本任务代码中放置一个断点以了解发生了什么 - 不要使用MessageBox 进行调试。
  • strArr.Length-1
  • 您真的需要计算所有行,还是只需要知道在初始标题行之外至少有一行?如果您有一个非常大的文件,ReadAllLines 可能会消耗所有可用内存,尤其是在您的机器配置不佳的情况下。
  • 另外,我被I cannot just use a Data Flow Task, OLE Source then a Row Count as I do not know the filenames 弄糊涂了,你能帮我理解一下声明中的限制吗?

标签: c# sql-server csv ssis ssis-2012


【解决方案1】:

如何在脚本任务中为 SSIS 变量赋值?

假设您在脚本任务配置页面中有一个名为 @[User::RowCount] 的变量,它有一个位置来标识变量的只读集合以及读/写变量集合。将此添加到 ReadWrite 集合中。

在您的实际代码中,您会将计算出的行数分配给 SSIS 变量的 .Value 属性。

Dts.Variables["RowCount"].Value = strArr.Length -1;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多