3

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

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

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

我怎样才能摆脱这个警告,以便我可以在启用WarnAsError的情况下运行我的包?

(顺便说一句,似乎其他人可能在文件末尾有一个部分行中遇到了类似的问题,尽管这不是什么大问题。)

4

3 回答 3

5

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

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

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

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

如果您使用的是固定宽度格式的输入文件,Microsoft 可能会为您提供有用的知识库文章。基本上,他们建议您在文件末尾添加一个虚拟行。

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

第 3 步:关闭非文本的文本限定

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

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

连接管理器

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

在此处输入图像描述

于 2012-06-04T21:27:28.747 回答
1

如果文件中行的字节宽度是已知的,您始终可以仔细检查文件的总字节大小是否可以除以预期的行大小,从而为您提供一个很好的圆形行数(而不是小数) .

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

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

于 2014-03-05T19:37:17.173 回答
1

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

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

在 Windows 7 和 Windows 2008 中一切正常。

于 2014-06-18T20:25:30.300 回答