我正在尝试从Table
数据导出到Excel
到T-SQL
查询。经过一些研究,我想出了这个
INSERT INTO OPENROWSET ('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=G:\Test.xls;',
'SELECT * FROM [Sheet1$]')
SELECT *
FROM dbo.products
当我执行上述查询时出现此错误
Msg 7302,Level 16,State 1,Line 7无法创建OLE实例 数据库提供程序“Microsoft.Jet.OLEDB.4.0”用于链接服务器“(null)”。
所以通过互联网寻求解决方案,得到以下链接
在上面的链接中,他们说我们需要管理员在 C驱动器 TEMP
文件夹中创建文件夹,因为OPENROWSET
在{{1}内创建了一些文件或文件夹文件夹
我在My Home PC中这样做,我是管理员。仍然得到同样的错误。
SQL SERVER 详细信息
Microsoft SQL Server 2016(RC1) - 13.0.1200.242(X64)2016年3月10日 16:49:45版权所有(c)Microsoft Corporation Enterprise Evaluation Windows 10 Pro 6.3上的版本(64位)(Build 10586:)
任何可以解决问题的指针都将受到高度赞赏
更新:我已经配置了TEMP
和
执行以下查询
Ad Hoc Distributed Queries
现在收到此错误
消息7438,级别16,状态1,行7 32位OLE DB提供程序 无法在64位SQL上加载“Microsoft.Jet.OLEDB.4.0” 服务器
答案 0 :(得分:33)
好的,我让它对我有用,看起来我今天会发帖。
我有MS Sql server 2012和Office 2013.这看起来非常挑剔,因此您可能需要适应您的特定版本。
Microsoft.ACE.OLEDB
文件,如下所示:这是SP_CONFIGURE命令:
SP_CONFIGURE 'show advanced options', 1;
GO
RECONFIGURE;
SP_CONFIGURE 'Ad Hoc Distributed Queries', 1;
GO
RECONFIGURE;
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParam', 1
在较新的 SQL Server 2014上您使用'DynamicParameters'
代替'DynamicParam'
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
请确保您注册msexcl40.dll:
regsvr32 C:\Windows\SysWOW64\msexcl40.dll
答案 1 :(得分:2)
查看sp_configure / RECONFIGURE ...
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
GO
RECONFIGURE;
GO
有关详细信息,请参阅以下链接:
https://technet.microsoft.com/en-us/library/aa259616(v=sql.80).aspx
答案 2 :(得分:1)
工作!!!十分感谢。 仅适用于64位Win服务器2012R2。让我把整个工作脚本部分地重复上面的部分,这些部分并不容易(对我来说)组合在一起:
1)下载适用于Windows的Microsoft.ACE.OLEDB.12.0,64位版本:https://www.microsoft.com/en-us/download/details.aspx?id=13255
2)创建具有相应列的excel文件(在本例中为name和class)。
3)运行以下代码:
sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO
/* -- Not sure commented bits are necessary but I also have run them
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'AllowInProcess', 1
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'DynamicParameters', 1
GO
-- below two lines failed with: Msg 2787, Level 16, State 1, Procedure sp_MSset_oledb_prop, Line 106 Invalid format specification: '%1!.'.
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParam', 1
-- but works all two as below:
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
-- Succeded to run after success with Excel so does not looks like necessary
*/
INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 8.0;Database=C:\testing.xlsx;',
'SELECT Name, Class FROM [Sheet1$]')
SELECT [Name],[Class] FROM Qry_2
GO
答案 3 :(得分:-1)
请执行以下查询来解决此问题:
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'AllowInProcess', 1
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'DynamicParameters', 1
GO