Excel文件导入到SQL,文本、数字丢失,变成NULL的处理

导入一个Excel到Sql,好方便进行数据的筛选,但是却发现,在导入后,电话字段有很多数据丢失,变成了Null,经过仔细检查,发现丢失的都是包含有字符型的(如区号与号码之间的-),再查看一下导入后的sql表,电话所在字段类型为float类型~~~难怪会有很多数据丢失了。。
将Excel中的该列单元格格式改为 文本 格式,再导入,已经不行。

搜索一番,发现有一个方法,不过这个方法只针对于完全数字格式的字段,如若想导入的是数字格式,而非字符串格式,就需要这样的做法:

Excel导入数据到Sql Server

Excel导入数据到Sql Server

1、将导入的过程存为DTS包,将此DTS包找到

2、在刚才保存的DTS包上右键,编辑包

3、在编辑器里右键单击空白处,选择“脱接属性”命令。

4、依次展开“连接”——excel的那个连接——>“OLE DB属性“,找到“Extended Properties”属性。

5、将右边的“Value”属性的值改为“Excel 8.0;HDR=YES;IMEX=1”

6、保存此包、并运行即可。

关于第五步中的IMEX设置有如下解释:

IMEX是用来告诉驱动程序使用Excel文件的模式,其值有0、1、2三种,分别代表导出、导入、混合模式。当我们设置 IMEX=1时将强制混合数据转换为文本,但仅仅这种设置并不可靠,IMEX=1只确保在某列前8行数据至少有一个是文本项的时候才起作用,它只是把查找前8行数据中数据类型占优选择的行为作了略微的改变。例如某列前8行数据全为纯数字,那么它仍然以数字类型作为该列的数据类型,随后行里的含有文本的数据仍然变空。
另一个改进的措施是IMEX=1与注册表值TypeGuessRows配合使用,TypeGuessRows 值决定了ISAM 驱动程序从前几条数据采样确定数据类型,默认为“8”。可以通过修改“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft \Jet\4.0\Engines\Excel”下的该注册表值来更改采样行数。但是这种改进还是没有根本上解决问题,即使我们把IMEX设为“1”, TypeGuessRows设得再大,例如1000,假设数据表有1001行,某列前1000行全为纯数字,该列的第1001行又是一个文本,ISAM驱动的这种机制还是让这列的数据变成空。

但是这也仅仅是导入数字类型的字段,如果要导入为字符型的,比如说我们的电话号码形式的(010-21345678),这种做法是行不通的,但是还有另外一种很简单的方法,就是将Excel文件导出成Csv格式的文件,再将csv导入到Sql,就可以很方便的把电话号码导入进去了。这种做法也仅限于导入字符型的数据,因为CSV格式为文本格式,不包括数据类型,如果需要导入后数据为数字类型,就需要用上边的方法了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值