导入前请先关闭本地文件,解除占用。
截断——长度或类型不匹配(右键单元格格式)
凡是提示报错中带有"截断"等字样,注意看一下里面提示的列是哪个。比如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的时候就提前对齐了,算是习惯问题。