在Excel中,咱们时常会碰到这样的字段(最多见的就是电话号码),即有纯数字的(如没有带区号的电话号码),又有数字和其它字符混合 (如“区号-电html
话号码”)的数据,在导入SQLServer过程当中,会发现要么纯数字的数据导过去以后变成了NULL,要么就是数字和其它字符混合的数据导过去以后变成sql
了NULL。数据库
我首先想到的就是将这个字段的全部数据在Excel中设置为文本格式,刚才说了原本就是但愿导入SQLServer时成为字符型,但结果使人失望,不起安全
做用。服务器
最终网上搜索到了答案:混合数据类型列的强制解析——IMEX=1
使用 IMEX=1 选参以后,只要取样数据里是混合数据类型的列,一概强制解析为 nvarchar/ntext 文本。固然,IMEX=1 对单一数据类型列的解析是不影编辑器
响的。post
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或其它。spa
6.Microsoft.Jet.OLEDB.4.0,根据不一样的office版本写4.0或12.0或其它。
7.IMEX=1,是转换成文本输入的意思,很是重要,若是没有,就跟你直接导入效果同样。
8.Sheet1是表名,千万别看到语句中有$就在表名后加上$,由于$是语句要加的,别多此一举。htm
上述语句执行后,可能会报出如下错误:it
SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问,由于此组件已做为此服务器安全配置的一部分而被关闭。系统管理员能够经过使用 sp_configure 启用 'Ad Hoc Distributed Queries'。有关启用 'Ad Hoc Distributed Queries' 的详细信息,请参阅 SQL Server 联机丛书中的 "外围应用配置器"。
1.开启Ad Hoc Distributed Queries组件,在sql查询编辑器中执行以下语句:
exec sp_configure 'show advanced options',1
reconfigure
exec sp_configure 'Ad Hoc Distributed Queries',1
reconfigure
如需关闭则参数1改成0