下面这个导入语句解决了excel中含有混合的字段会导入sql server会变成null的问题,excel格式是.xls,数据库版本SQL Server 2008(SQL Server 2008需要设置的,还挺烦的,后面我会贴出来)
SELECT * into test
FROM OpenDataSource
('Microsoft.Jet.OLEDB.4.0','Data Source="E: est.xls";
User ID=Admin;Password=;Extended properties="Excel 5.0;
HDR=Yes;IMEX=1;"')...[test$]
1.HDR(HeaDer Row)设置
若指定值为Yes,代表Excel档中的工作表第一行是栏位名称
若指定值为No,代表Excel档中的工作表第一行就是资料了,没有栏位名称
2.IMEX(IMport EXport mode)设置
IMEX有三种模式,各自引起的读写行动也不合,
0 is Export mode
1 is Import mode
2 is Linked mode (full capabilities)
不合的IMEX参数代表不合的读写行动,IMEX参数说明:
当 IMEX=0 时为“汇出模式”,这个模式开启的 Excel 档案只能用来做“写入”用处。
当 IMEX=1 时为“汇入模式”,这个模式开启的 Excel 档案只能用来做“读取”用处。
当 IMEX=2 时为“连結模式”,这个模式开启的 Excel 档案可同时增援“读取”与“写入”用处。
所谓“4.5010763038+14 ”只是显示用的,实际还是“450107630382345”。所以使用读取即 IMEX=1时,得到“4.5010763038+14 ”。
而 IMEX=0时,得到“450107630382345”。
这句不是太懂,我excel中的数字都是文本格式,导入到数据库中,用上面的导入语句,有的会变成科学计数的格式,这里把IMEX=1改为IMEX=0就OK了。
参考文档:http://www.cnblogs.com/panjun/archive/2012/10/19/2731106.html
关于导入语句中的Excel版本问题,我不是很明白。在网上查了资料,这是excel的开发版本号,但是Excel 5.0对应的是哪个版本?如果按照下面的对应关系,Excel 5.0比excel97还早,我的excel是2003版本做的,我用2007和2013编辑。
excel97 Ver. 8.0
excel2000 Ver. 9.0
excel2002(xp) Ver. 10.0
excel2003 Ver. 11.0
excel2007 Ver. 12.0
excel2010 Ver. 14.0
而且导入语句中的Excel 5.0不能改为8.0,改为8.0就会出错。