0

我正在将表输出导出到 CSV 文件。我正在使用具有 OLE DB 源和平面文件目标的 SSIS 包来执行此操作。我收到以下错误:

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

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

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

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

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

有人可以请教吗?

4

3 回答 3

1

@user7396598

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

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

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

于 2018-05-15T20:45:20.330 回答
1

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

看到这个 SO: SSIS 数据转换失败

概括:

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

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

仔细检查导出向导中允许您设置列大小的任何位置。确保输出文件的那些与原始表列的匹配。

于 2018-05-14T21:18:32.860 回答
0

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

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

于 2019-04-11T05:08:39.667 回答