我将表格输出导出为CSV文件。我正在使用具有OLE DB源和平面文件目的地的SSIS包来完成它。我收到以下错误:
[平面文件目的地[2]]错误:数据转换失败。列"地址"的数据转换返回状态值4和状态文本"文本被截断或目标代码页中的一个或多个字符不匹配。"。
[平面文件目的地[2]]错误:无法复制或转换列#34;地址"的平面文件数据。
[SSIS.Pipeline]错误:SSIS错误代码DTS_E_PROCESSINPUTFAILED。组件"平面文件目的地"上的ProcessInput方法(2)在处理输入"平面文件目的地输入"时,错误代码为0xC02020A0失败(6)。标识的组件从ProcessInput方法返回错误。该错误特定于组件,但错误是致命的,将导致数据流任务停止运行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。
[OLE DB Source [9]]错误:尝试向数据流任务缓冲区添加行失败,错误代码为0xC0047020。
[SSIS.Pipeline]错误:SSIS错误代码DTS_E_PRIMEOUTPUTFAILED。 OLE DB Source上的PrimeOutput方法返回错误代码0xC02020C4。当管道引擎调用PrimeOutput()时,组件返回失败代码。失败代码的含义由组件定义,但错误是致命的,管道停止执行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。
有人可以提供建议吗?
答案 0 :(得分:1)
Address的输出列指定为小于原始表列。
见SO:SSIS data conversion failed
要点:
(1)右键单击Flat File Source并选择“Show Advanced Editor”转到“输入和输出属性”选项卡展开“平面文件源输出”并选择“外部列”
(2)选择“地址”列,在右侧,将长度增加到与原始表中的列相同的大小
在“导出”向导中的任意位置仔细检查,以便设置列大小。确保输出文件的那些与原始表列的那些匹配。
答案 1 :(得分:0)
@ user7396598
感谢您指点我正确的方向。所以我进行了比较,记录似乎只是以相同的顺序插入,直到它们不匹配后的一个点。我可以捕获坏数据。通过运行以下内容: select * from table where address!= cast(address as varchar(1000)),当我删除了我的SSIS打包工作的坏数据时。
现在我需要弄清楚如何将错误数据转换为可接受的CSV格式。
答案 2 :(得分:0)
所以我即使在增加输出列的大小之后,在我的列中也有类似的问题,即错误的数据导致此错误。就我而言,我通过使用replace
函数替换了列中的错误数据来解决了这个问题。
我通过写查询导出了数据,在该查询中,我写了所有列名,而不是“ select *”,并在引起问题的列上使用了replace
函数。我替换了所有可能导致截断的字符,例如逗号,管道,制表符等,并留有空白。