使用脚本将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个可能的原因。

  1. 喷气引擎必须安装在服务器上。 在服务器上安装MS Office可以对此进行sorting。
  2. xls的path是相对于服务器的,而不是你运行命令的工作站
  3. 运行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”尚未注册。

发现我们需要安装这个:

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=c06b8369-60dd-4b64-a44b-84b371ede16d&displaylang=en

之后,就像一个魅力工作!