EXCEL导入数据到SQLSERVER
关于EXCEL数据导入到SQLServer中字段存在NULL的问题
已知的可以有两种解决办法,而这两种解决方法几乎如出一辙
第一种方法
1.在数据库中建表
2.然后通过将excel中的数据拷贝到Uedit32里面,通过列块模式操作成insert into ... values (‘‘,‘‘...),成功完成,这种方法还算简便,但是对于没有Uedit32(或之类软件)的朋友来说,这个方法没有可行性。
第二种方法
将excel另存为.txt文件的格式,然后通过SQLServer自带的DTS工具导入,一定要转换为txt后导入才有效哦
在将excel另存为.txt文件的时候,系统会提示2次,都点确定即可
导入的时候需要注意:
1.选择文件格式的时候,选择"带分隔符。各列之间可用任何字符分科(D)。"
2.文本类型选择ANSI
3.行分隔符一般选择"{CR}{LF}"
4.文本限定符,我选择的是无,这要看你的转换后的文本的内容和格式了。
5.选上"第一行含有列名称"
下面的操作就简单了,更改导入的目标表名称(点击"转换"可以修改字符类型)
完成了。
应该还有种通过T-SQL语句的方法来导入的,语句如下,但是测试了一下还有问题,如下:
【转载】
在工作中,而且还是项目上线割接中碰到,结果电话号码数据全乱套了,后果很严重,幸好,在网上找到了这篇文章,有了解决的指望,希望下周一客户能允许我在生产库解决掉这个问题。
在Excel中,我们时常会碰到这样的字段(最常见的就是电话号码),即有纯数字的(如没有带区号的电话号码),又有数字和其它字符混合 (如“区号-电话号码”)的数据,在导入SQLServer过程中,会发现要么纯数字的数据导过去之后变成了NULL,要么就是数字和其它字符混合的数据 导过去之后变成了NULL。
为什么有些是纯数字的数据导过去之后变成了NULL,有些却是数字和其它字符混合的数据导过去之后变成了NULL,原来是在将Excel数据导入
SQLServer过程中,SQLServer会做出判断,是采用float型还是nvarchar型来接受数据,测试发现(没有科学依据),SQLServer采用哪一型取决于将要导入
的数据中本身具有哪一型的记录数比例多,如10笔数据,有4笔没有带区号的电话号码,6笔是带区号的电话号码,那么转到SQLServer就会选择
nvarchar型,结果就是4笔没有带区号的电话号码导过去之后全成了NULL,反之亦然。不管怎么样,我们最终都希望SQLServer是采用nvarchar来接受
数据,毕意我们要导入的数据中有数字和其它字符混合的数据,用float型来接受是不可能的,这样只要我们解决了将纯数字的数据转换成字符型并让
SQLServer接受就可以了。
我首先想到的就是将这个字段的所有数据在Excel中设置为文本格式,刚才说了本来就是希望导入SQLServer时成为字符型,但结果令人失望,不起作用。
最终网上搜索到了答案:混合数据类型列的强制解析——IMEX=1
使用 IMEX=1
选参之后,只要取样数据里是混合数据类型的列,一律强制解析为 nvarchar/ntext 文本。当然,IMEX=1 对单一数据类型列的解析是不影
响的。
SELECT * INTO Table08
FROM
OpenDataSource
(‘Microsoft.Jet.OLEDB.4.0‘,‘Data Source="E:\1.xls";Extended
properties="Excel 5.0;HDR=Yes;IMEX=1;"‘)...[Sheet1$]
注:
1.这条语句是在SQLServer查询分析器中执行,并且要选择好数据库,否则会把要导入的数据往别的数据库中导了。
2.Table08是数据导入后在SQLServer中的表名,属于新建,所以请确认在导入数据前数据库中没有该表名,否则会提示已存在同一表名。
3.Data Source,不要连在一起写,中间有一空格。
4.E:\1.xls,为Excel所在的绝对路径和数据库名。
5.Excel
5.0,根据不同的Excel版本写5.0或8.0或其它。
6.IMEX=1,是转换成文本输入的意思,非常重要,如果没有,就跟你直接导入效果一样。
7.Sheet1是表名,千万别看到语句中有$就在表名后加上$,因为$是语句要加的,别画蛇添足。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/oraclemch/archive/2009/12/13/4994927.aspx
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。