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



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

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

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

最佳答案

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

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

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

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

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

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

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

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

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

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

关于ssis - 为什么 SSIS 提示 "There is a partial row at the end of the file"?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10888616/

10-13 08:11