Loading

关于向SQL Server导入Excel出错的统一解决方法

导入前请先关闭本地文件,解除占用

截断——长度或类型不匹配(右键单元格格式)

凡是提示报错中带有"截断"等字样,注意看一下里面提示的列是哪个。比如F4是第四列,点击back回到编辑映射那里,点预览看一下格式是否不匹配。

这里主要原因在Excel方,有的Excel的数据长度不像表面上那样,最好的办法直接设定长一点的char类,或者直接nvarchar变长就好。另外右键设置单元格格式看一下是什么类型的。

通常都是长度和类型的原因,报错信息给我们最直接的反馈就是哪一列出了问题,从这两个角度入手很好解决的。

解决后最好关掉导入向导重新来一遍,否则可能会出现因文件占用出现的报错。

约束——主键重复或Excel有空行

凡是提示如下内容:

 

消息

错误 0xc0202009: 数据流任务 1: SSIS 错误代码 DTS_E_OLEDBERROR。出现 OLE DB 错误。错误代码: 0x80004005。
已获得 OLE DB 记录。源:“Microsoft SQL Server Native Client 10.0” Hresult: 0x80004005 说明:“未指定的错误”。
 (SQL Server 导入和导出向导)
 
错误 0xc020901c: 数据流任务 1: 输入“Destination Input”(60) 上的 输入列“studentId”(127) 出错。返回的列状态是:“该值违反了该列的完整性约束。”。
 (SQL Server 导入和导出向导)
 
错误 0xc0209029: 数据流任务 1: SSIS 错误代码 DTS_E_INDUCEDTRANSFORMFAILUREONERROR。“输入“Destination Input”(60)”失败,错误代码为 0xC020907D,而且针对“输入“Destination Input”(60)”的错误行处理设置指定一旦出错就失败。在指定组件的指定对象上出错。可能在此之前已经发出错误消息,提供了有关失败的详细信息。
 (SQL Server 导入和导出向导)
 
错误 0xc0047022: 数据流任务 1: SSIS 错误代码 DTS_E_PROCESSINPUTFAILED。处理输入“Destination Input”(60)时,组件“目标 - t_Student”(47)的 ProcessInput 方法失败,错误代码为 0xC0209029。标识的这个组件从 ProcessInput 方法返回了一个错误。虽然该错误是此组件特有的,但却是致命的,将导致数据流任务停止运行。可能在此之前已经发出错误消息,提供了有关失败的详细信息。
 (SQL Server 导入和导出向导) 

 

错误很明显,解决方案很隐蔽。看第二段,这里翻译过来就是Excel中的studentId列有重复,Excel选中“数据”——“删除重复项”即可。

如果还是不行,那么就是因为有空行,NULL值的存在当然也是违反了主键约束性的了!!

小技巧:复制显示出来的表格数据到新建的表中,省得再去排查空行(注意,Excel删除重复的功能对空行无用,亲测)

空列

举一反三,还可能是空列造成提示"列不能为0”的情况。

少列

似乎这是个不常见的错误,但有时候的确可能有疏忽,此时会提示:

SSIS验证失败,并返回验证状态“ VS_ISBROKEN”或"不能存在空列的情况"

拓展提示

另外说一下导入要注意的几个细节,其余的直接下一步就好。我的目前是2020版本,不过亲测与之前的并无不同。

1.数据源选择“Microsoft Excel”,版本选择97-2003比较稳定。首行包含列名称这里,如果第一行就是数据,那么就取消勾选

(注意默认是勾选的)。

如果第一行是表头(标题等),那么就默认选中。

2.目标选择“SQL Server Native Client 11.0 ”,身份验证就是连接数据库一开始的登录信息,然后选要导进的数据库。

3.选择表和视图这里,如果你是要导入已经新建好的表中,那么要勾选

通常表格只用到了'Sheet1$'(就是Excel左下角的工作区),在上面勾选以后点击目标,找到数据库对应的表即可。

如果是直接导入一个新表,那么就不用编辑目标了,直接下一步就好。可以点击预览看一下顺序对不对。

如果列的顺序不一致,点击编辑映射就好,通常编辑Excel的时候就提前对齐了,算是习惯问题。

posted @ 2020-06-16 10:38  James轩  阅读(6102)  评论(0编辑  收藏  举报