Excel数字、文本混合列导入SQL Server出现的问题&解决办法
http://annie-out.blogbus.com/logs/60276495.html
序号 | 姓名 | 内部电话 | 住址 |
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原文:
但是,由于 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 注册表设置。但在此模式下,执行更新操作时可能会出现意外的结果。
看到了没有?你想在前8行里多放几行文本的企图也是徒劳的。数字格式的数据一样会被扔掉,尽管数字可以毫无问题的转成文本。
而在Excel中将有问题的单元格单元格格式设为文本这一办法,事实证明,不起作用。
倒是在每个数字前加单引号可以正常导入,可问题是行数太多,不可能一行行手动加单引号。
用VBA或公式加吧,又无法判断每个单元格是数字类型还是文本类型,导致该列所有单元格都被加了引号。
而且这种方式导入SQL数据库后,还得用查询分析器写SQL语句把引号去了。
最后,最简单的一个办法——把Excel文件另存为“文本文件(制表符分隔)”,再用SQL来导入,一切OK了
为什么?因为txt文件里的内容只有文本属性,不像Excel中还有数字、货币、日期等一帮捣乱的类型。
转载于:https://blog.51cto.com/zhangleiy/380264
Excel数字、文本混合列导入SQL Server出现的问题&解决办法相关推荐
- 网页服务器打开数据库连接很慢,登录进入点晴OA或打开SQL server很慢的解决办法:开启TCP/IP支持...
登录进入点晴OA或打开SQL server很慢的解决办法:开启TCP/IP支持 今天新配置了一台服务器,环境如下: 操作系统:windows server 2008 R2 X64 SQL版本:Win ...
- 使用SSIS包将多个Excel文件中的数据导入SQL Server表中
This article explores an SSIS package for importing multiple Excel files data into SQL Server tables ...
- SQL server 2000及SQL server 2005 数据库置疑解决办法
以数据库mpcyerp为例,做对数据库置疑的处理方法说明: 一.将mpcyerp_Data.MDF文件拷贝出来并备份 在企业管理器中建立一个同名的新数据库mpcyerp 二.停止SQL Server服 ...
- 开始菜单中无SQL Server配置管理器的解决办法
Win+R打开运行 键入 SQLServerManager13.msc(SQL Server 2016版本)回车,OK
- sql server 数据库目录名无效解决办法
问题症状: 1.sqlserver 打开表提示:目录名称无效 2.在执行sql语句时提示:在执行批处理时出现错误.错误消息为: 目录名无效 3.所有的数据库都存在1跟2的问题 问题分析: 1.操作系统 ...
- 转贴 :sql数据库置疑:Sql Server数据库置疑的解决
sql数据库置疑:Sql Server数据库置疑的解决 办法 原因: 通常这个问题是由于硬盘空间不够或硬盘读写错误造成的. 现象: 数据库后面有"置疑"字样,查看系统事务日记出现以 ...
- 如何将数据从Excel文件导入SQL Server数据库
There are many ways to import data from an Excel file to a SQL Server database using: 有多种方法可以使用以下方法将 ...
- net以execl做数据库_C#.NET Excel文件数据导入SQL Server数据库完整代码
展开全部 在日常的项目中,Excel,Word,txt等格式的数62616964757a686964616fe58685e5aeb931333337626235据导入到数据库中是很常见 这里将分为.n ...
- 将Excel数据导入SQL Server数据库
遇到了一个需求,需要将Excel中的数据导入SQL Server数据库中,当然,不是使用企业管理器之类的直接导入数据的那种,而是要做到程序中.本来我最初的考虑是将Excel中的数据读到dataset中 ...
最新文章
- 上传文件、上传按钮、Form组件上传文件
- 用border画三角形
- batchnomal_pytorch的batch normalize使用详解
- IAR 下根据官方库建立 STM32的工程
- Illustrator 教程,如何在 Illustrator 中添加一行文字?
- 简单查询树形结构数据库表
- 【优化预测】基于matlab狼群算法优化BP神经网络预测【含Matlab源码 658期】
- MATLAB切换中文(无语言选项)
- 樱花FRP(SAKURA FRP)远程桌面+rdpwrap绕过限制
- 移动前端开发和 Web 前端开发的区别是什么
- Android 各国语言缩写及简称详细介绍
- 【BZOJ1491】[NOI2007]社交网络 Floyd
- 整站SEO优化方案:整站优化的方案的流行格式
- 好看的皮囊 · 也是大自然的杰作 · 全球高质量 · 美图 · 集中营 · 美女 · 2017-08-29期...
- 【信息安全技术】RSA算法的研究及不同优化策略的比较
- matlab 二维地图常用绘图函数用法(plot,fill,rectangle)
- 计算机开机慢怎么办,笔记本电脑开机很慢怎么办?五个小妙招来帮忙!
- java-net-php-python-SSM的美工接单系统计算机毕业设计程序
- iOS wkWebview调整html文字大小以及文字两端对齐
- 反向代理方式实现IIS与Tomcat整合
热门文章
- 判断一个string是否可以为数字
- 在Eclipse中使用Maven构建Spring项目
- 提高C++性能的编程技术笔记:虚函数、返回值优化+测试代码
- AES(Advanced Encryption Standard) Intrinsics各函数介绍
- 图像配准----双向匹配
- 【Qt】Q_PROPERTY():属性系统
- 学习理发去哪里_作为女性,学习运维工程师去哪里好
- php 重新载入类文件夹,php-如何配置Behat从应用程序特定文件夹自动加载类
- 打包tomcat没有xml文件_Spring Boot 项目打包 War 并部署到 Tomcat
- .sh是什么语言_shell的重生历史:从sh到bash