--64位环境中使用SQL查询excel的方式
环境:
OS:Windows Server 2008 R2 Enterprise
MSSQL:Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) (Build 7601: Service Pack 1)
查询access的方式,请移步:在MSSQL中对ACCESS文件操作方式汇总
因为SQL2005默认是没有开启'Ad Hoc Distributed Queries' 组件,开启方法如下
--使用sa登录数据库
EXEC sp_configure 'show advanced options', 1 --更改配置
RECONFIGURE --安装
GO
EXEC sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE
GO
--查询配置值
select value,value_in_use,name
from sys.configurations
where name ='Ad Hoc Distributed Queries'
一、案情:执行Microsoft.Jet.OLEDB.4.0查询excel报错。
代码:
select *
FROM OpenDataSource('Microsoft.Jet.OLEDB.4.0',
'Data Source=C:/Book1.xlsx;
User ID=Admin;Password=;Extended Properties=Excel 8.0;')...a$
--result:
/*
消息7308,级别16,状态1,第1 行
因为OLE DB 访问接口'Microsoft.Jet.OLEDB.4.0' 配置为在单线程单元模式下运行,所以该访问接口无法用于分布式查询。
*/
二、缘由:
--默认情况下,Microsoft OLE DB Provider for Jet 和Jet ODBC 驱动程序只能在为环境下运行,无法运行在位模式下。
三、处理:
--下载并安装Office System Driver Beta 64位驱动
注意:如果本机已安装位的office组件,则要先进行卸载,再安装位的MADE2010。
在安装AccessDatabaseEngine_X64.exe之后更换Microsoft.ACE.OLEDB驱动查询:
代码:
select @@VERSION,*
FROM OpenDataSource('Microsoft.ACE.OLEDB.12.0',
'Data Source=C:/Book1.xlsx;
User ID=Admin;Password=;Extended Properties=Excel 12.0;')...a$
--结果如图所示:
——>总结:找对问题是关键,比如这里的MADE2010驱动。