文本被截断,或者目标代码页ole db源与平面文件目标中的一个或多个字符不匹配

问题描述 投票:0回答:3

我正在将表格输出导出为CSV文件。我正在使用具有OLE DB源和平面文件目的地的SSIS包。我收到以下错误:

[平面文件目标[2]]错误:数据转换失败。列“地址”的数据转换返回状态值4和状态文本“文本被截断或目标代码页中的一个或多个字符不匹配。”。

[平面文件目标[2]]错误:无法复制或转换列“地址”的平面文件数据。

[SSIS.Pipeline]错误:SSIS错误代码DTS_E_PROCESSINPUTFAILED。组件“Flat File Destination”(2)上的ProcessInput方法在处理输入“Flat File Destination Input”(6)时失败,错误代码为0xC02020A0。标识的组件从ProcessInput方法返回错误。该错误特定于组件,但错误是致命的,将导致数据流任务停止运行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。

[OLE DB Source [9]]错误:尝试向数据流任务缓冲区添加行失败,错误代码为0xC0047020。

[SSIS.Pipeline]错误:SSIS错误代码DTS_E_PRIMEOUTPUTFAILED。 OLE DB Source上的PrimeOutput方法返回错误代码0xC02020C4。当管道引擎调用PrimeOutput()时,组件返回失败代码。失败代码的含义由组件定义,但错误是致命的,管道停止执行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。

任何人都可以建议吗?

sql sql-server ssis flat-file flatfiledestination
3个回答
1
投票

Address的输出列指定为小于原始表列。

看到这个SO:SSIS data conversion failed

摘要:

(1)右键单击平面文件源并选择“显示高级编辑器”转到“输入和输出属性”选项卡展开“平面文件源输出”并选择“外部列”

(2)选择“地址”列,在右侧,将长度增加到与原始表中的列相同的大小

在“导出”向导中的任意位置仔细检查,以便设置列大小。确保输出文件的那些与原始表列的那些匹配。


0
投票

@ user7396598

谢谢你指点我正确的方向。所以我进行了比较,记录似乎只是以相同的顺序插入,直到它们不匹配后的一个点。我可以捕获坏数据。通过运行以下命令:select * from table where address!= cast(address as varchar(1000)),当我删除了我的SSIS打包工作的坏数据。

现在我需要弄清楚如何将坏数据转换为可接受的CSV格式。

参考 - https://stackoverflow.com/a/2683496/8452633


0
投票

因此,即使在增加输出列的大小之后,我的一个列中也存在类似的错误数据问题,从而导致此错误。在我的情况下,我通过使用replace函数替换列中的错误数据解决了这个问题。

我通过编写查询导出数据,并在该查询而不是“select *”中编写了所有列名,并在导致问题的列上使用了replace函数。我替换了可能导致截断的所有字符,例如逗号,管道,标签等空格。

© www.soinside.com 2019 - 2024. All rights reserved.