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

摘要:
导入前请先关闭本地文件,解除占用。源:“MicrosoftSQLServerNativeClient10.0”Hresult:0x80004005说明:“未指定的错误”。错误0xc020901c:数据流任务1:输入“DestinationInput”上的输入列“studentId”出错。虽然该错误是此组件特有的,但却是致命的,将导致数据流任务停止运行。 错误很明显,解决方案很隐蔽。通常表格只用到了'Sheet1$',在上面勾选以后点击目标,找到数据库对应的表即可。

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

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

凡是提示报错中带有"截断"等字样,注意看一下里面提示的列是哪个。比如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的时候就提前对齐了,算是习惯问题。

免责声明:文章转载自《关于向SQL Server导入Excel出错的统一解决方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇JAVA框架-前后端分离(Json和ajax)ThreadPool.QueueUserWorkItem的性能问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Excel操作 Microsoft.Office.Interop.Excel.dll的使用

先说说题外话,前段时间近一个月,我一直在做单据导入功能,其中就涉及到Excel操作,接触Excel后发现他的api说明并不多,好在网上有很多朋友贴出了一些代码,我在不断的挫折中吸取了很多教训,现共享出来,给大家参考。 1. 最好在客户端使用,不要在B/S服务端使用,因为会受到IIS权限和占用内存影响,多人并发操作必然完蛋 2. 需要引入两个DLL,Micr...

【Word&Excel】【2】excel把公式生成的#value!去掉

前言:用公式统一处理数据的时候,一些位置计算会得到#value!,需要改为空。此时搜索该单词并替换是没用的 正文: 使用时改为=IFERROR(原公式,"")即可 参考博客: excel怎样把#value!去掉? - 知乎https://www.zhihu.com/question/30576339...

npoi导入导出excel

1.导入      protected void btnImport_Click(object sender, EventArgs e)         {             if (fileUp.HasFile == false)//HasFile用来检查FileUpload是否有指定文件             {                ...

Excel中,从字符串中截取指定字符

情况一:提取字符串中的数字 目标:提取C列的全部数字 方法一:Excel中的FIND函数+MID函数   方法:想要从指定位置截取,用到MID函数。因为right和left函数都是从第一个字符或者最后一个字符开始截取,不适合。     MID语法:MID(字符串,截取开始位置,返回字符的个数)     因为截取的开始位置不统一,但是要截取的数字前面都有#...

TP6框架--EasyAdmin学习笔记:Excel表单导入数据库

这是我写的学习EasyAdmin的第四章,这一章我给大家分享下Excel表单导入数据库的全流程需要怎么处理并提供案例 首先给大家看下这个功能的原理,下面是PHP连接打印机的代码 public function uplExcel(Request $request) { if (!empty($_FILES['excel']['...

poi excel导入整数数字自动加小数点解决

private String numberFormat(Cell cell){ NumberFormat numberFormat = NumberFormat.getInstance(); // 不显示千位分割符,否则显示结果会变成类似1,234,567,890 numberFormat.setGroupingUsed(false); i...