gpt4 book ai didi

sql-server - 如何防止 SSIS 截断平面文件中最后一个数据行的最后一个字段?

转载 作者:行者123 更新时间:2023-12-02 21:47:33 24 4
gpt4 key购买 nike

我有一个 SSIS 包,可以解压并加载一个文本文件。它在调试器和上传到我们的生产环境的各种服务器上一直运行良好。

我现在的问题是这样的:正在加载一个文件,一切都很顺利,但突然之间,在最后一个数据行(根据错误消息),最后一个字段被截断。我认为我们收到的文件可能被搞乱了,将其打开,一切都很好......

它是一个 | 分隔文件,没有文本限定符,并且 {CR}{LF} 作为行分隔符。由于出现截断错误的字段是该行中的最后一个字段(在本例中是整个文件的最后一个字段),因此其分隔符为 {CR}{LF}| 相反。

该文件看起来很原始,我什至将其加载到 Excel 中,没有任何问题,也没有任何投诉。我已经通过我的本地计算机运行了这个文件,通过 VS 2008 中的调试器运行该包,它运行得很好。有人对这样的行为有任何问题吗?我无法在崩溃的环境中对其进行太多测试,因为这是我们的生产环境,而且现在是高峰时段......因此非常感谢任何建议。

错误消息:

描述:数据转换失败。 “ACD_Flag”列的数据转换返回状态值 4 和状态文本“文本被截断或一个或多个字符在目标代码页中不匹配。”。结束错误 错误:2013-02-01 01:32:06.32 代码:0xC020902A 源:将 ACD 文件加载到表 HDS 平面文件 1 [9] 说明:“输出列“ACD_Flag”(1040)”失败,因为发生截断,并且“输出列“ACD_Flag”(1040)”上的截断行处置指定截断失败。指定组件的指定对象发生截断错误。结束错误 错误:2013-02-01 01:32:06.32 代码:0xC0202092 来源:将 ACD 文件加载到表 [9] 说明:处理数据行 737541 上的文件“MY FLAT FILE”时发生错误。

737541 是文件中的最后一行。

更新:最初我有行分隔符 {CR},但我已将其更新为 {CR}{LF} 以尝试解决此问题...虽然无济于事。

最佳答案

更新:

我能够重新创建您添加到问题中的错误消息。当行中的列分隔符多于平面文件连接管理器中定义的分隔符时,就会发生错误。

这里有一个简单的例子来说明它。我创建了一个简单的文件,如下所示。

Sample file

我创建了一个包并使用下面显示的设置配置了平面文件连接管理器。

Flat file General

Flat file Column 0

Flat file Column 1

Flat file Advanced

Flat file Preview

我使用数据流任务配置了包来读取文件并将数据填充到数据库表中。当我执行该包时,它失败了。

Failed

点击了 BIDS 上的执行结果选项卡。它显示的消息与您在问题中发布的消息相同。

[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.

希望它有助于确定您的问题。

Execution results

之前的回答:

我认为文件最后一行最后一个字段中的值可能超过平面文件连接管理器上最后一列的 OutputColumnWidth 属性值.

右键单击 SSIS 包上的平面文件连接管理器。单击平面文件连接管理器编辑器上的高级选项卡页。单击最后一列并检查 OutputColumnWidth 属性上的值。

现在,验证导致包失败的文件最后一行的最后一个字段的数据长度。

OutputColumnWidth

如果这是问题的原因,这里有两个可能的选项来解决这个问题:

  1. 将最后一列的 OutputColumnWidth 属性增加到满足您要求的适当长度。

  2. 如果您不关心截断警告,则可以更改平面文件源编辑器最后一列的截断错误输出。双击平面文件源编辑器,单击错误输出。将截断列值更改为忽略失败重定向行。我更喜欢重定向行,因为它能够通过将无效内容重定向到单独的表来跟踪传入文件中的数据问题,并采取必要的操作来修复数据。

希望能为您提供解决问题的想法。

Error output

关于sql-server - 如何防止 SSIS 截断平面文件中最后一个数据行的最后一个字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14652987/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com