Doo*_*ght 9 sql sql-server excel sql-server-2008
我试图将这个excel表格放到一个表格中,所以我可以对它应用select语句等,用它的信息更新表格.
SELECT *
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\PB.xlsx',
'SELECT * FROM [Sheet1$]')
Run Code Online (Sandbox Code Playgroud)
我正在运行64位机器.不知道它是什么excel版本.
错误:
消息7399,级别16,状态1,行1 OLE DB提供程序"Microsoft.Jet.OLEDB.4.0"用于链接服务器"(null)"报告错误.提供商未提供有关错误的任何信息.消息7303,级别16,状态1,行1无法为链接服务器"(null)"初始化OLE DB提供程序"Microsoft.Jet.OLEDB.4.0"的数据源对象.
当我更改为Excel 12.0;
OLE DB提供程序"Microsoft.Jet.OLEDB.4.0"用于链接服务器"(null)"返回消息"找不到可安装的ISAM.".消息7303,级别16,状态1,行1无法为链接服务器"(null)"初始化OLE DB提供程序"Microsoft.Jet.OLEDB.4.0"的数据源对象.
导致此错误的原因有5种.
4 ...
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
GO
RECONFIGURE;
GO
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
现在我不知道为什么会这样,特别是考虑到其他人都说他们应该设置为1.然而,对我来说,将它们设置为零,在SQL Server 2008R2 32bit和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$]')
Run Code Online (Sandbox Code Playgroud)
注意:我故意使用了一个示例,其中文件名和工作表名称都有空格来表明可以这样做.
对于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$]');
Run Code Online (Sandbox Code Playgroud)