前言:
近日,笔者用Excel向数据库导入大批数据时,报错,花了比较久的时间才找到解决办法。问题如下。
问题:
- 正在执行 (错误)
消息
错误 0xc020901c: 数据流任务 1: 源 - data1$.输出[Excel 源输出] 上的 源 - data1$.输出[Excel 源输出].列[Structure] 出错。返回的列状态是:“文本被截断,或者一个或多个字符在目标代码页中没有匹配项。”。
(SQL Server 导入和导出向导)
错误 0xc020902a: 数据流任务 1: “源 - data1$.输出[Excel 源输出].列[Structure]”由于发生截断而失败,而且针对“源 - data1$.输出[Excel 源输出].列[Structure]”的截断行处理设置指定截断时出错。在指定组件的指定对象上出现截断错误。
(SQL Server 导入和导出向导)
错误 0xc0047038: 数据流任务 1: SSIS 错误代码 DTS_E_PRIMEOUTPUTFAILED。源 - data1$ 的 PrimeOutput 方法返回了错误代码 0xC020902A。管道引擎调用 PrimeOutput() 时该组件返回了一个失败代码。虽然该失败代码只与该组件有关,但这个错误是致命的,管道已停止执行。可能在此之前已经发出错误消息,提供了有关失败的详细信息。
(SQL Server 导入和导出向导)
原因:
数据库的字段设置的是Max最大了,为什么会出现这种报错呢?原来是Excel导入时,数据库会看第一行数据字段的长度,如果超过255的长度,就会开辟最大长度空间,如果小于255的长度,就会创建255的长度空间,后续行如果出现大于255长度的字段,就会报如上的错误。
解决:
解决思路也很简单,既然是判断数据首行,那我们就在数据首行每个字段增加长度超过255字符的字段即可。接下来再倒入就没有问题了。
倒入成功后,我们再把长长长的这条数据删除掉。
总结:
如果大家有什么更好的办法,记得给我流言噢。