SSIS脚本任务获取csv文件的行数
Posted
技术标签:
【中文标题】SSIS脚本任务获取csv文件的行数【英文标题】:SSIS Script Task get row count of csv files 【发布时间】: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
弄糊涂了,你能帮我理解一下声明中的限制吗?
【参考方案1】:
如何在脚本任务中为 SSIS 变量赋值?
假设您在脚本任务配置页面中有一个名为 @[User::RowCount] 的变量,它有一个位置来标识变量的只读集合以及读/写变量集合。将此添加到 ReadWrite 集合中。
在您的实际代码中,您会将计算出的行数分配给 SSIS 变量的 .Value
属性。
Dts.Variables["RowCount"].Value = strArr.Length -1;
【讨论】:
以上是关于SSIS脚本任务获取csv文件的行数的主要内容,如果未能解决你的问题,请参考以下文章