sql查询从excel中选择数据

时间:2015-07-29 05:50:29

标签: sql sql-server-2005

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

  

Msg 7302,Level 16,State 1,Line 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$]')

1 个答案:

答案 0 :(得分:0)

根据您的情况,您可以针对文本文件使用OPENROWSET和OleDb Provider发出选择:

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 Server服务的帐户运行命令的工作站必须具有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$]')