Excel数据导入Sql Server,部分数字为Null
在Excel中,我们时常会碰到这样的字段(最常见的就是电话号码),即有纯数字的(如没有带区号的电话号码),又有数字和其它字符混合 (如“区号-电
话号码”)的数据,在导入SQLServer过程中,会发现要么纯数字的数据导过去之后变成了NULL,要么就是数字和其它字符混合的数据导过去之后变成
了NULL。
我首先想到的就是将这个字段的所有数据在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.Microsoft.Jet.OLEDB.4.0,根据不同的office版本写4.0或12.0或其它。
7.IMEX=1,是转换成文本输入的意思,非常重要,如果没有,就跟你直接导入效果一样。
8.Sheet1是表名,千万别看到语句中有$就在表名后加上$,因为$是语句要加的,别画蛇添足。
上述语句执行后,可能会报出以下错误:
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
推荐阅读
-
解决将Excel表导入到SQL Server数据库时出现Text was truncated or one or more characters had no match in the target code错误
-
Excel数据导入Sql Server,部分数字为Null
-
Excel数据导入到Sql server
-
文本、Excel、Access数据导入SQL Server2000的方法
-
SQL SERVER导入EXCEL文件:无法创建链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Ace.OLEDB.12.0" 的实例。
-
精妙的SQL和SQL SERVER 与ACCESS、EXCEL的数据导入导出转换
-
怎样从MS Office Excel 2007导入数据到SQL Server 2005
-
Sql Server 数据库表查询结果导出为excel文件
-
文本、Excel、Access数据导入SQL Server2000的方法
-
Excel数据导入到Access,Sql Server中示例代码