为什么SSIS抱怨“文件末尾有一个部分行”?

时间:2012-06-04 21:27:29

标签: ssis

我正在使用SSIS中的数据流任务将平面文件导入数据库。该文件非常简单:每行包含三个以逗号分隔的值。但是,每当我运行此任务时,我都会收到平面文件组件的警告:

  

警告:0x8020200F:文件末尾有一个部分行。

无论文件大小如何,这个警告似乎都会发生:即使文件中只有少量行,视觉验证(扩展字符和看不见的东西),我仍然会收到它。此外,我是否在文件末尾有一个空行或者我只是在没有尾随CR + LF的情况下结束它似乎并不重要。

如何摆脱此警告,以便在启用 WarnAsError 的情况下运行我的软件包?

(顺便说一下,似乎其他人可能在There is a partial row at the end of the file中遇到了类似的问题,尽管这不是一个问题。)

3 个答案:

答案 0 :(得分:5)

如果您遇到此问题,我发现有三件事要尝试。在三个案例中至少有两个案例中,SSIS忽略了我的输入文件行,只显示了上面的警告。因此,我不建议忽略此警告!

步骤1:验证您的平面文件是否有效

输入文件无效时会出现此错误。如果你的输入文件有数百万行,这可能特别难以检测,但是你发现文件格式违规是至关重要的,因为SSIS很乐意给你这个警告并继续它的方式而不导入有问题的行,或者在某些情况下,在违规行之后的行。我发现发现源文件问题的最简单方法是检查正在成功导入的行数。如果它与您在平面文件中所期望的数字大不相同,那么某些地方可能会出现问题。

步骤2:在末尾尝试虚拟线(仅限固定宽度)

如果您使用的是固定宽度格式的输入文件,Microsoft可能会为您提供有用的KB article。基本上,他们建议你在文件末尾添加一条虚线。

我没有使用固定宽度的文件,所以我不能说这种技术有多么有用。

步骤3:关闭非文本

的文本限定

这是一个棘手的问题,因为我认为 TextQualified 属性默认为 True 。如果您的输入文件使用非文本字段(整数等),那么您必须告诉SSIS它不应该期望这些列被限定为文本。基本上,尽管看起来完全有效,但您的输入文件将无效。

TextQualified 是平面文件连接管理器中列的属性。

Connection Managers

要更改它,请打开连接管理器,单击“高级”,然后单击非文本列。确保 TextQualified 属性设置为 False 。您需要为所有非文本列执行此操作。

enter image description here

答案 1 :(得分:1)

如果文件中一行的字节宽度已知,您可以始终仔细检查文件的总字节大小是否可以除以预期的行大小,以便为您提供一个很好的圆整行数(相对于小数)。

它还有助于从您的来源了解预期有多少记录,但如果您没有这个,您至少可以在加载文件时至少仔细检查所得到的加载表记录计数与计算行数。 / p>

当源平面文本文件丢失时,我经常看到此错误,它位于文件末尾的最后\ r \ n。

答案 2 :(得分:1)

在Windows 64位上运行是完美的。它导致没有丢失的行,但是在Windows 2008上运行时我丢失了最后一行。

我的解决方法是 1.在Windows 2008上打开BID中的ssis。 2.打开文件连接管理器,确保将文本限定符设置为 3.重建它

在Windows 7和Windows 2008中都可以正常工作。