我有一个SSIS包,它解压缩并加载一个文本文件。它从调试器,以及从各种服务器上传到我们的生产环境的过程中,工作很好。
我现在的问题是:正在加载一个文件,一切都进行得很顺利,但是突然之间,在最后一个数据行(根据错误消息)上,最后一个字段被截断了。我以为我们收到的文件可能搞砸了,打开了,那里一切都很好.
它是一个|
分隔文件,没有文本限定符,{CR}{LF}
作为行分隔符。由于带有截断错误的字段是行中的最后一个字段(在本例中是整个文件的最后一个字段),因此它的分隔符是{CR}{LF}
,而不是|
.。
该文件看起来很原始,我甚至已经将它加载到Excel中,没有任何问题,也没有任何抱怨。在VS 2008中,我已经通过本地机器运行了这个包,并且运行得很完美。有人对这种行为有任何意见吗?我无法在它崩溃的环境中测试它,因为这是我们的生产环境,现在是高峰时间……因此,任何建议都是非常感谢的。
错误消息:
Description: Data conversion failed. The data conversion for column "ACD_Flag" returned status value 4 and status text "Text was truncated or one or more characters had no match in the target code page.". End Error Error: 2013-02-01 01:32:06.32 Code: 0xC020902A Source: Load ACD file into Table HDS Flat File 1 [9] Description: The "output column "ACD_Flag" (1040)" failed because truncation occurred, and the truncation row disposition on "output column "ACD_Flag" (1040)" specifies failure on truncation. A truncation error occurred on the specified object of the specified component. End Error Error: 2013-02-01 01:32:06.32 Code: 0xC0202092 Source: Load ACD file into Table [9] Description: An error occurred while processing file "MY FLAT FILE" on data row 737541.
737541是文件中的最后一行。
{CR}
**,更新:最初我使用了行分隔符,但我已经将其更新为** {CR}{LF}
以尝试修复此问题.虽然没有用.
发布于 2013-02-06 16:34:10
所以我想出了一个答案。其他的答案都是经过深思熟虑的,而且很好,但是我用一种稍微不同的技术解决了这个问题。
我几乎消除了截断的实际可能性,因为一旦我查看了平面文件中的数据,它就是没有意义.截断绝对不可能发生。因此,我决定将错误信息的后半部分集中在:or one or more characters had no match in the target code page
经过一些激烈的谷歌搜索之后,我发现了几个类似的网站:http://social.msdn.microsoft.com/Forums/en-US/sqlintegrationservices/thread/6d4eb033-2c45-47e4-9e29-f20214122dd3/
基本上,如果您知道截断没有发生,那么您的字符就没有代码页匹配,所以从1252 ANSI Latin I
切换到65001 UTF-8
应该会产生不同的效果。
由于这已经转移到生产,而生产环境是唯一有这个问题的环境,我想100%确保我有正确的修复,所以我又做了一个改变。我没有文本限定符,但是SSIS仍然保留平面文件连接管理器到Text_Qualified
中每个列的默认TRUE
属性。我将它们全部设置为false (不仅仅是所讨论的列)。所以现在包没有看到它需要一个限定符,然后转到限定符并看到<none>
,然后不查找限定符.它不使用限定符句号。
在这两个更改之间,包最终成功运行。因为这两个更改都是在同一个版本中完成的,而且我在生产中只收到了这个错误,而且我不能为了实验目的来回切换不同的东西,所以我不能说到底是哪一个更改完成了,但是我可以告诉您,这是我所做的唯一两个更改。
需要注意的一点是:运行此包的生产机器是:10.50.1617
和我正在开发的机器(我正在测试的大多数机器)是:10.50.4000
。我已经向我们的运营DBA提出了一个可能的问题,希望我们能让一切都保持一致。
希望这能帮助其他有类似问题的人。如果有人想要更多的信息或细节(我觉得好像我已经涵盖了一切),请在这里评论,并让我知道。我将很高兴地更新这一点,以使它更有帮助的任何人在未来的到来。
发布于 2013-02-01 19:31:45
更新:
我可以重新创建错误信息,您已经添加到您的问题。如果该行中的列分隔符比平面文件连接管理器中定义的列分隔符多,则会发生此错误。
这里有一个简单的例子来说明这一点。我创建了一个简单的文件,如下所示。
我创建了一个包,并用下面的设置配置了平面文件连接管理器。
我将包配置为数据流任务,以读取文件并将数据填充到数据库表中。当我执行这个包时,它失败了。
单击出价上的Execution Results
选项卡。它显示的信息与您在问题中发布的信息相同。
[Flat File Source [44]] Error: Data conversion failed. The data conversion for column "Column 1" returned status value 4 and status text "Text was truncated or one or more characters had no match in the target code page.".
[Flat File Source [44]] Error: The "output column "Column 1" (128)" failed because truncation occurred, and the truncation row disposition on "output column "Column 1" (128)" specifies failure on truncation. A truncation error occurred on the specified object of the specified component.
[Flat File Source [44]] Error: An error occurred while processing file "C:\temp\FlatFile.txt" on data row 2.
[SSIS.Pipeline] Error: SSIS Error Code DTS_E_PRIMEOUTPUTFAILED. The PrimeOutput method on component "Flat File Source" (44) returned error code 0xC0202092. The component returned a failure code when the pipeline engine called PrimeOutput(). The meaning of the failure code is defined by the component, but the error is fatal and the pipeline stopped executing. There may be error messages posted before this with more information about the failure.
希望它能帮助你发现你的问题。
先前的答复:
我认为,文件最后一行上最后一个字段中的值可能超过了平面文件连接管理器上最后一列的OutputColumnWidth
属性值。
右击SSIS包上的平面文件连接管理器.单击Advanced
选项卡页面上的Flat File Connection Manager Editor
。单击最后一列并检查OutputColumnWidth
属性的值。
现在,验证导致包失败的文件中最后一行最后一个字段的数据长度。
如果这是问题的原因,下面有两个可能的选项来解决这个问题:
OutputColumnWidth
属性增加到符合您要求的适当长度。Flat File Source Editor
,单击Error Output
.将截断列值更改为Ignore failure
或Redirect row
.我更喜欢Redirect row
,因为它允许通过将无效者重定向到单独的表并采取必要的操作来修复数据,从而跟踪传入文件中的数据问题。希望这能给你一个解决问题的办法。
发布于 2013-02-05 21:35:00
只发生在一台服务器上?你没有使用测试限定符吗?我们以前也有过这种情况。这就是修复它的方法。
转到该服务器并打开xml文件。搜索forTextQualifier,看看它是否显示:
<DTS:Property DTS:Name="TextQualifier" xml:space="preserve"><none></DTS:Property>
如果它说不出来的话。
https://stackoverflow.com/questions/14652987
复制相似问题