如何从SSIS中具有不同列的多个平面文件获取平面文件名并执行行计数?

时间:2016-09-09 02:19:11

标签: ssis

我试图从文件夹目录中获取所有文件名及其行数。 (如果可能的话,还有以字节为单位的文件大小)我正在使用Microsoft Visual Studio 2010 Shell。这是我到目前为止所做的:

我创建了一个 Foreach循环容器,将枚举器设置为 Foreach文件枚举器,并将表达式设置为我要循环的文件夹的变量。我使用*.*离开了“文件”部分,并要求检索Name Only。我已将变量映射更改为名为FullFilePath的新变量,容器为Package,值类型为String,值:为空。

然后我向循环添加了一个数据流。添加了平面文件源,行计数和OLE DB目标。我将Flat文件源属性表达式更改为Foreach循环容器表达式中的相同文件夹变量。我将变量RecordCount添加到行计数函数(Int32,值0)。 OLE DB目标创建一个名为OLE DB Destination的新表。

下一步是执行SQL任务和Insert Into DBO.FileData (FileName,RowCount) Values (?,?)。我设置了2个参数映射 - 1)来自Foreach循环容器的变量名,FullFilePath和数据类型VarChar,2)来自行计数,RecordCount和数据类型长的变量。

然后我有另一个执行SQL任务,它删除了数据流任务创建的表。问题是,在所有这些步骤中,包仍然无法完成。它实际上挂起并在预执行时失败。它说:

  

警告:访问被拒绝。错误:无法打开数据文件' FullFilePath'错误:平面文件源未执行预执行阶段并返回错误代码0xC020200E。

你看到的任何我可能做错了吗?如果图片有用,请告诉我。

1 个答案:

答案 0 :(得分:0)

所以我终于明白了。为了遍历具有不同标题和列数的所有文件,我决定更改平面文件源中的选项以取消选择"文件包含标题。"这样做允许所有文件具有相同的#1列,默认情况下是列0(我所有文件中的第一列是某种数字字段或ID)。我能够通过行计数映射并插入到SQL表中。然后我能够完成Foreach循环并将文件名和行计数划分到另一个SQL表中以记录计数。然而,这需要非常长的时间,即它已运行超过14个小时,它只计算了13个文件。当然,有些文件是250K +行,但我不认为这需要很长时间。