10

我试图将此 excel 表放入表中,因此我可以对其应用 select 语句等,以使用其信息更新表。

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

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

错误:

消息 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 时;

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

4

3 回答 3

9

对于 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$]');
于 2012-08-23T12:12:42.010 回答
8

此错误有 5 个可能的原因。

  1. 喷气发动机必须安装在服务器上。在服务器上安装 MS Office 可以解决这个问题。
  2. xls 的路径是相对于服务器的,而不是您从中运行命令的工作站
  3. 运行 SQL Server 服务的帐户必须对 xls 所在的文件夹具有写入权限。一种可能的解决方案是将服务启动帐户(例如管理员)的 temp= 和 tmp= 环境变量更改为(例如)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$]')

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

于 2012-09-04T08:18:32.143 回答
1

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

我们有一个在没有安装 Office 版本的 Windows 8 64 位机器上安装 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 阻止了对组件“即席分布式查询”的声明“OpenRowset/OpenDatasource”的访问,因为该组件作为该服务器安全配置的一部分被关闭。系统管理员可以使用 sp_configure 启用“即席分布式查询”的使用。有关启用“即席分布式查询”的详细信息,请在 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

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

于 2016-04-06T19:02:53.013 回答