【问题标题】:sql query to select data from excelsql查询从excel中选择数据
【发布时间】:2015-07-29 05:50:29
【问题描述】:

当运行 SQL 查询以从 excel 中选择数据时,我收到此错误:

消息 7302,第 16 级,状态 1,第 1 行
无法为链接服务器“(null)”创建 OLE DB 提供程序“Microsoft.Jet.OLEDB.4.0”的实例。

在 SQL Server 2005 中执行此查询时:

SELECT * 
INTO #TEMP1 
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
                'Excel 8.0;Database=E:\Students.xls',
                'SELECT * FROM [Sheet1$]')

【问题讨论】:

  • 您的应用是 64 位的吗? Microsoft.Jet.OLEDB.4.0 没有 64 位提供程序

标签: sql sql-server-2005


【解决方案1】:

在您的情况下,您使用 OPENROWSET 和 OleDb 提供程序对文本文件发出选择:

SELECT * 
INTO #TEMP1 
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
                'Excel 8.0;Database=E:\Students.xls',
                'SELECT * FROM [Sheet1$]')

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

如果这不起作用,则必须在服务器上安装喷气发动机。在服务器上安装 MS Office 可以解决这个问题。

xls 的路径是相对于服务器的,而不是您从运行 SQL 服务器服务的帐户运行命令的工作站必须对 xls 所在的文件夹具有写入权限。一种可能的解决方案是将服务启动帐户(例如管理员)的 temp= 和 tmp= 环境变量更改为(例如)c:\temp,然后在 c:\temp 上启用对所有人的完全控制

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 


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

【讨论】:

    猜你喜欢
    • 2011-09-16
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 2019-04-04
    • 1970-01-01
    • 2014-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多