使用脚本将Excel工作表放入临时表中

时间:2012-08-23 11:29:02

标签: sql sql-server sql-server-2008 excel

我试图将这个excel表格放到表格中,这样我就可以对它应用select语句等,用它的信息更新表格。

SELECT * 
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
          'Excel 8.0;Database=C:\PB.xlsx',
          'SELECT * FROM [Sheet1$]')

我正在运行64位机器。 不知道它是什么excel版本。

错误:

  

Msg 7399,Level 16,State 1,Line 1       链接服务器“(null)”的OLE DB提供程序“Microsoft.Jet.OLEDB.4.0”报告错误。提供商未提供有关错误的任何信息。       Msg 7303,Level 16,State 1,Line 1       无法为链接服务器“(null)”初始化OLE DB提供程序“Microsoft.Jet.OLEDB.4.0”的数据源对象。

当我更改为Excel 12.0时;

  

链接服务器“(null)”的OLE DB提供程序“Microsoft.Jet.OLEDB.4.0”返回消息“找不到可安装的ISAM。”。       Msg 7303,Level 16,State 1,Line 1       无法为链接服务器“(null)”初始化OLE DB提供程序“Microsoft.Jet.OLEDB.4.0”的数据源对象。

3 个答案:

答案 0 :(得分:8)

此错误有5种可能原因。

  1. 喷气发动机必须安装在服务器上。在服务器上安装MS Office会对其进行排序。
  2. xls的路径是相对于服务器的,而不是您从
  3. 运行命令的工作站
  4. 运行SQL Server服务的帐户必须具有对xls所在文件夹的写访问权限。一种可能的解决方案是将服务启动帐户(例如管理员)的temp =和tmp =环境变量更改为(例如)c:\ temp,然后对c:\ temp启用对每个人的完全控制
  5. 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上执行以下SQL语句的技巧$ Office 2007

    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$]')
    

    注意:我故意使用了一个示例,其中文件名和工作表名称都有空格以表明可以这样做。

答案 1 :(得分:7)

对于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$]');

答案 2 :(得分:1)

以防其他人像我一样偶然发现这些年,这对我有用:

我们在Windows 8 64位计算机上安装了SQL Server Express 2012,没有安装Office版本。

以下是我设置的存储过程的一部分:

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阻止访问STATEMENT的'OpenRowset / OpenDatasource'   组件'Ad Hoc Distributed Queries',因为该组件是   作为此服务器的安全配置的一部分关闭。一个   系统管理员可以启用“Ad Hoc Distributed”   使用sp_configure查询。有关启用的更多信息   'Ad Hoc Distributed Queries',搜索'Ad Hoc Distributed Queries'   在SQL Server联机丛书中。

我们更改了配置:

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

之后,像魅力一样工作!