版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://annie-out.blogbus.com/logs/60276495.html
Excel文件:
序号 姓名 内部电话 住址
1 小李 1234 ……
2 小王 5678 ……
3 小张 2345(国内长途) ……
…… …… …… ……

如上结构的Excel文件,用SQL Server的“导入数据”功能来将其导入SQL数据库中。
结果发现在“内部电话”列中,所有带有文字的电话号,被导入后字段值全部为NULL

SQL数据表:

序号 姓名 内部电话 住址
1 小李 1234 ……
2 小王 5678 ……
3 小张 NULL ……
…… …… …… ……

通过在SQL中设置(在导入导出中,目的方选择新建表),发现数据库默认将“内部电话”列识别为float型,因为其新建表对应字段就是float类型的。
看来是SQL认为包含文字的那些电话号码无法转换成数字,所以是无效的数据,从而采用NULL来代替。

通过查询微软网站,发现MS大意如是说:SQL在导入Excel混合数据列的时候,由于数据类型不唯一,导致SQL无法确定数据类型(看来SQL也有犯糊涂的时候)。SQL的应对之道就是统计该数据列的前8行数据中出现最多的类型,并以此类型做为默认类型。而在我的Excel文件中,“内部电话”列的前8行中的确要数纯数字格式的电话号码最多,所以SQL就把这列认为是float型的(为什么不是int型?不解)。至于此列其它格式的数据,SQL的办法是——直接扔了(汗一个。。)

MS原文:

……Excel 不会像关系数据库那样为 ADO 提供有关其数据的详细架构信息。因此,驱动程序必须至少扫描几行现有数据,才能有根据地猜测各列的数据类型。“要扫描的行数”的默认值为八 (8) 行。可以指定从一 (1) 行到十六 (16) 行的整数值,或指定零 (0),扫描所有现有行。这可通过向连接字符串添加可选的 MaxScanRows= 设置,或在 DSN 配置对话框中更改要扫描的行数设置来完成。

但是,由于 ODBC 驱动程序中存在一个错误,所以目前指定“要扫描的行数”(MaxScanRows) 设置不起作用。换句话说,Excel ODBC 驱动程序(MDAC 2.1 和更高版本)始终扫描指定数据源中的前 8 行,以确定各列的数据类型。

……

使用这两种 OLE DB 提供程序时都应考虑的问题
混用数据类型时应注意的事项

如上文所述,ADO 必须猜测 Excel 工作表或范围中各列的数据类型。(这不受 Excel 单元格格式设置的影响。)如果同一列中既有数字值,也有文本值,会出现严重的问题。Jet 和 ODBC 提供程序将返回占多数的类型的数据,但对于占少数的数据类型,则会返回 NULL(空)值。如果该列中两种类型数据的数量相等,提供程序将优先选择数字型数据,放弃文本型数据。

例如:

在被扫描的八 (8) 行中,如果该列包含五 (5) 个数字值和三 (3) 个文本值,则提供程序将返回五 (5) 个数字和三 (3) 个空值。
在被扫描的八 (8) 行中,如果该列包含三 (3) 个数字值和五 (5) 个文本值,则提供程序将返回三 (3) 个空值和五 (5) 个文本值。
在被扫描的八 (8) 行中,如果该列包含四 (4) 个数字值和四 (4) 个文本值,则提供程序将返回四 (4) 个数字和四 (4) 个空值。

因此,如果列中包含不同类型的值,唯一的解决方法是将该列中的数字值存储为文本,然后在需要时使用 Visual Basic VAL 函数或同等功能的函数将其还原为数字。

作为解决只读数据问题的一种替代方法,可在连接字符串的“扩展属性”部分中使用“IMEX=1”这一设置来启用导入模式。这可强制执行 ImportMixedTypes=Text 注册表设置。但在此模式下,执行更新操作时可能会出现意外的结果。

原文地址:257819: 如何在 Visual Basic 或 VBA 中使用 ADO 来处理 Excel 数据

看到了没有?你想在前8行里多放几行文本的企图也是徒劳的。数字格式的数据一样会被扔掉,尽管数字可以毫无问题的转成文本。

DSN设置那里根本就没给我们提供加“IMEX=1”的地方,这个字符串是给ADO用的,如果你要编程读取Excel中的数据就用得着它了。不过MS说用这样的连接字符串更新时可能会有问题,这点要稍加注意。我们这里只是数据导入,根本不用考虑这一项。

而在Excel中将有问题的单元格单元格格式设为文本这一办法,事实证明,不起作用。
倒是在每个数字前加单引号可以正常导入,可问题是行数太多,不可能一行行手动加单引号。
用VBA或公式加吧,又无法判断每个单元格是数字类型还是文本类型,导致该列所有单元格都被加了引号。
而且这种方式导入SQL数据库后,还得用查询分析器写SQL语句把引号去了。

最后,最简单的一个办法——把Excel文件另存为“文本文件(制表符分隔)”,再用SQL来导入,一切OK了
为什么?因为txt文件里的内容只有文本属性,不像Excel中还有数字、货币、日期等一帮捣乱的类型。

转载于:https://blog.51cto.com/zhangleiy/380264

Excel数字、文本混合列导入SQL Server出现的问题&解决办法相关推荐

  1. 网页服务器打开数据库连接很慢,登录进入点晴OA或打开SQL server很慢的解决办法:开启TCP/IP支持...

     登录进入点晴OA或打开SQL server很慢的解决办法:开启TCP/IP支持 今天新配置了一台服务器,环境如下: 操作系统:windows server 2008 R2 X64 SQL版本:Win ...

  2. 使用SSIS包将多个Excel文件中的数据导入SQL Server表中

    This article explores an SSIS package for importing multiple Excel files data into SQL Server tables ...

  3. SQL server 2000及SQL server 2005 数据库置疑解决办法

    以数据库mpcyerp为例,做对数据库置疑的处理方法说明: 一.将mpcyerp_Data.MDF文件拷贝出来并备份 在企业管理器中建立一个同名的新数据库mpcyerp 二.停止SQL Server服 ...

  4. 开始菜单中无SQL Server配置管理器的解决办法

    Win+R打开运行 键入 SQLServerManager13.msc(SQL Server 2016版本)回车,OK

  5. sql server 数据库目录名无效解决办法

    问题症状: 1.sqlserver 打开表提示:目录名称无效 2.在执行sql语句时提示:在执行批处理时出现错误.错误消息为: 目录名无效 3.所有的数据库都存在1跟2的问题 问题分析: 1.操作系统 ...

  6. 转贴 :sql数据库置疑:Sql Server数据库置疑的解决

    sql数据库置疑:Sql Server数据库置疑的解决 办法 原因: 通常这个问题是由于硬盘空间不够或硬盘读写错误造成的. 现象: 数据库后面有"置疑"字样,查看系统事务日记出现以 ...

  7. 如何将数据从Excel文件导入SQL Server数据库

    There are many ways to import data from an Excel file to a SQL Server database using: 有多种方法可以使用以下方法将 ...

  8. net以execl做数据库_C#.NET Excel文件数据导入SQL Server数据库完整代码

    展开全部 在日常的项目中,Excel,Word,txt等格式的数62616964757a686964616fe58685e5aeb931333337626235据导入到数据库中是很常见 这里将分为.n ...

  9. 将Excel数据导入SQL Server数据库

    遇到了一个需求,需要将Excel中的数据导入SQL Server数据库中,当然,不是使用企业管理器之类的直接导入数据的那种,而是要做到程序中.本来我最初的考虑是将Excel中的数据读到dataset中 ...

最新文章

  1. 上传文件、上传按钮、Form组件上传文件
  2. 用border画三角形
  3. batchnomal_pytorch的batch normalize使用详解
  4. IAR 下根据官方库建立 STM32的工程
  5. Illustrator 教程,如何在 Illustrator 中添加一行文字?
  6. 简单查询树形结构数据库表
  7. 【优化预测】基于matlab狼群算法优化BP神经网络预测【含Matlab源码 658期】
  8. MATLAB切换中文(无语言选项)
  9. 樱花FRP(SAKURA FRP)远程桌面+rdpwrap绕过限制
  10. 移动前端开发和 Web 前端开发的区别是什么
  11. Android 各国语言缩写及简称详细介绍
  12. 【BZOJ1491】[NOI2007]社交网络 Floyd
  13. 整站SEO优化方案:整站优化的方案的流行格式
  14. 好看的皮囊 · 也是大自然的杰作 · 全球高质量 · 美图 · 集中营 · 美女 · 2017-08-29期...
  15. 【信息安全技术】RSA算法的研究及不同优化策略的比较
  16. matlab 二维地图常用绘图函数用法(plot,fill,rectangle)
  17. 计算机开机慢怎么办,笔记本电脑开机很慢怎么办?五个小妙招来帮忙!
  18. java-net-php-python-SSM的美工接单系统计算机毕业设计程序
  19. iOS wkWebview调整html文字大小以及文字两端对齐
  20. 反向代理方式实现IIS与Tomcat整合

热门文章

  1. 判断一个string是否可以为数字
  2. 在Eclipse中使用Maven构建Spring项目
  3. 提高C++性能的编程技术笔记:虚函数、返回值优化+测试代码
  4. AES(Advanced Encryption Standard) Intrinsics各函数介绍
  5. 图像配准----双向匹配
  6. 【Qt】Q_PROPERTY():属性系统
  7. 学习理发去哪里_作为女性,学习运维工程师去哪里好
  8. php 重新载入类文件夹,php-如何配置Behat从应用程序特定文件夹自动加载类
  9. 打包tomcat没有xml文件_Spring Boot 项目打包 War 并部署到 Tomcat
  10. .sh是什么语言_shell的重生历史:从sh到bash