使用sqlserver的导入导出功能整理一个数据库,几千万的数据。
在跑了不到1000W的时候报错了。错误提示:
消息
错误 0xc0202009: 数据流任务 1: SSIS 错误代码 DTS_E_OLEDBERROR。出现 OLE DB 错误。错误代码: 0x80004005。
已获得 OLE DB 记录。源:“Microsoft SQL Server Native Client 10.0” Hresult: 0x80004005 说明:“链接服务器 ‘(null)’ 的 OLE DB 访问接口 ‘STREAM’ 返回了对列 ‘[!BulkInsert].yw_Publisher’ 无效的数据。”。
(SQL Server 导入和导出向导)
错误 0xc0209029: 数据流任务 1: SSIS 错误代码 DTS_E_INDUCEDTRANSFORMFAILUREONERROR。“输入“Destination Input”(146)”失败,错误代码为 0xC020907B,而且针对“输入“Destination Input”(146)”的错误行处理设置指定一旦出错就失败。在指定组件的指定对象上出错。可能在此之前已经发出错误消息,提供了有关失败的详细信息。
(SQL Server 导入和导出向导)
错误 0xc0047022: 数据流任务 1: SSIS 错误代码 DTS_E_PROCESSINPUTFAILED。处理输入“Destination Input”(146)时,组件“目标 – lw_yw”(133)的 ProcessInput 方法失败,错误代码为 0xC0209029。标识的这个组件从 ProcessInput 方法返回了一个错误。虽然该错误是此组件特有的,但却是致命的,将导致数据流任务停止运行。可能在此之前已经发出错误消息,提供了有关失败的详细信息。
(SQL Server 导入和导出向导)
错误 0xc02020c4: 数据流任务 1: 无法向数据流任务缓冲区添加行,错误代码为 0xC0047020。
(SQL Server 导入和导出向导)
错误 0xc0047038: 数据流任务 1: SSIS 错误代码 DTS_E_PRIMEOUTPUTFAILED。组件“源 – lw_yw”(1) 的 PrimeOutput 方法返回了错误代码 0xC02020C4。管道引擎调用 PrimeOutput() 时该组件返回了一个失败代码。虽然该失败代码只与该组件有关,但这个错误是致命的,管道已停止执行。可能在此之前已经发出错误消息,提供了有关失败的详细信息。
(SQL Server 导入和导出向导)
以为是和表上的主键或者约束相关,去掉了所有条件,结果还是在相同的位置停了下来。
并且每次导入的最后一个记录相同,按此推理的话,就应该是下一条记录出了问题。但是尝试单独导入下一条记录又可以。
于是迷糊了半天。
最后不甘心,还是再实验了一下。最终找到了出线问题的记录。
原始是一个varchar字段出出现了@字符。这个在insert语句中没有问题,但是使用导入导出会报错。
最后要注意的是,导入导出使用的是BulkInsert 方式,每次可能读取一大段(多行记录一起处理),如果这批数据中有错,那么
程序就会报异常了,儿出错的记录往往不是最后一条记录的下一条记录。
来源URL:http://blog.csdn.net/pumaadamsjack/article/details/6134516