使用脚本将Excel工作表获取到临时表中
我试图把这个Excel表格放入一个表格,所以我可以将select的语句应用于它等等,以更新表格的信息。
SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=C:\PB.xlsx', 'SELECT * FROM [Sheet1$]')
我运行64位机器。 不知道什么是最好的版本。
错误:
消息7399,级别16,状态1,行1链接服务器“(null)”的OLE DB提供程序“Microsoft.Jet.OLEDB.4.0”报告了一个错误。 提供者没有给出关于错误的任何信息。 消息7303,级别16,状态1,行1无法初始化链接服务器“(null)”的OLE DB提供程序“Microsoft.Jet.OLEDB.4.0”的数据源对象。
当我更改为Excel 12.0;
OLE DB提供程序“Microsoft.Jet.OLEDB.4.0”用于链接服务器“(null)”返回消息“无法find可安装的ISAM”。 消息7303,级别16,状态1,行1无法初始化链接服务器“(null)”的OLE DB提供程序“Microsoft.Jet.OLEDB.4.0”的数据源对象。
这个错误有5个可能的原因。
- 喷气引擎必须安装在服务器上。 在服务器上安装MS Office可以对此进行sorting。
- xls的path是相对于服务器的,而不是你运行命令的工作站
- 运行SQL服务器服务的帐户必须具有对xls所在文件夹的写入权限。 一个可能的解决scheme是将服务启动帐户(例如,pipe理员)的temp =和tmp =环境variables更改为(例如)c:\ temp,然后在c:\ temp上启用“完全控制”
4 …
sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'Ad Hoc Distributed Queries', 1; GO RECONFIGURE; GO
5 ….
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'AllowInProcess', 0 GO EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'DynamicParameters', 0 GO
现在我不知道为什么这个工作,特别是考虑到其他人都说他们应该设置为1.然而,对我来说,将它们设置为零,为SQL Server 2008R2 32位和M $ Office 2007上的以下SQL语句
Select * into [temp_table$] FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=C:\temp\EXPENDITURE REPORT.xls;HDR=YES;IMEX=1', 'SELECT * FROM [EXPENDITURE SHEET$]')
注:我故意使用了一个例子,其中文件名和工作表名称都有空格来表明这可以完成。
对于xlsx文件(Excel 2007-2010),您可以使用ACE oledb提供程序而不是JET
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;HDR=YES;Database=C:\PB.xlsx', 'SELECT * FROM [Sheet1$]');
以防万一后来像我这样做了,这是什么对我有用:
我们有一个在Windows 8 64位计算机上没有安装Office版本的SQL Server Express 2012。
这里是我的存储过程我的一部分设置:
INSERT INTO OPENROWSET ('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Database=R:\Export Membership Database\Member_Export.xls;', 'SELECT * FROM [combined$]')
(下面的SELECT语句的其余部分)
我收到这个错误:
SQL Server阻止访问组件“Ad Hoc Distributed Queries”的STATEMENT“OpenRowset / OpenDatasource”,因为此组件是作为此服务器的安全configuration的一部分而closures的。 系统pipe理员可以使用sp_configure启用“Ad Hoc Distributed Queries”。 有关启用“Ad Hoc分布式查询”的更多信息,请在SQL Server联机丛书中search“Ad Hoc Distributed Queries”。
我们改变了configuration:
sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'Ad Hoc Distributed Queries', 1; GO RECONFIGURE; GO
再次存储过程,然后得到这个错误:
OLE DB提供程序“Microsoft.ACE.OLEDB.12.0”尚未注册。
发现我们需要安装这个:
之后,就像一个魅力工作!