无法为链接服务器 null 创建 OLE DB 提供程序 Microsoft.Jet.OLEDB.4.0 的实例
Cannot create an instance of OLE DB provider Microsoft.Jet.OLEDB.4.0 for linked server null
我正在尝试通过 T-SQL
查询将我的 Table
数据导出到 Excel
。经过一些研究,我想出了这个
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 Cannot create an instance of OLE
DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "(null)".
于是上网求解,得到如下link
在上面 link 他们说我们需要成为管理员才能在 C 盘 TEMP
文件夹中创建文件夹,因为 OPENROWSET
在 TEMP
文件夹
中创建一些文件或文件夹
我在“我的家用电脑”中执行此操作并且我是管理员。仍然遇到同样的错误。
SQL服务器详情
Microsoft SQL Server 2016 (RC1) - 13.0.1200.242 (X64) Mar 10 2016
16:49:45 Copyright (c) Microsoft Corporation Enterprise Evaluation
Edition (64-bit) on Windows 10 Pro 6.3 (Build 10586: )
任何解决问题的建议将不胜感激
更新: 我已经配置了 Ad Hoc Distributed Queries
和
执行了以下查询
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
现在收到此错误
Msg 7438, Level 16, State 1, Line 7 The 32-bit OLE DB provider
"Microsoft.Jet.OLEDB.4.0" cannot be loaded in-process on a 64-bit SQL
Server.
查看 sp_configure/重新配置...
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
我有 MS Sql server 2012 和 Office 2013。这似乎很挑剔,所以您可能需要根据您的特定版本进行调整。
- 下载 Microsoft.ACE.OLEDB.12.0 for Windows,64 位版本可在此处找到:https://www.microsoft.com/en-us/download/details.aspx?id=13255
- 在您的服务器上安装它。
- 检查用户 运行 SQL 服务器并确保用户有权访问临时目录 C:\Windows\ServiceProfiles\LocalService\AppData\Local\Temp 如果它是本地服务帐户或 C:\Windows\ServiceProfiles\NetworkService\AppData\Local\Temp 如果它是网络服务帐户。
- 像这样配置 'Ad Hoc Distributed Queries' 并启用
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
有效!!!太谢谢了。
仅适用于 64 位 Win 服务器 2012R2。让我将整个工作脚本部分重复上面的部分(对我而言)不容易组合在一起:
下载 Microsoft.ACE.OLEDB.12.0 for Windows,64 位版本可在此处找到:https://www.microsoft.com/en-us/download/details.aspx?id=13255
创建包含相应列的 excel 文件(在本例中为名称和 class)。
运行 代码如下:
sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO
-- Until SQL Server 2012
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'AllowInProcess', 1
-- SQL Server 2014 or later
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'DynamicParameters', 1
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
-- Now you can export to Excel
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
-- Or import from Excel
select * from OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 8.0;Database=c:\targetWorkbook.xls;',
'SELECT * FROM [targetSheet$]')
请执行以下查询来解决此问题:
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
我正在尝试通过 T-SQL
查询将我的 Table
数据导出到 Excel
。经过一些研究,我想出了这个
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 Cannot create an instance of OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "(null)".
于是上网求解,得到如下link
在上面 link 他们说我们需要成为管理员才能在 C 盘 TEMP
文件夹中创建文件夹,因为 OPENROWSET
在 TEMP
文件夹
我在“我的家用电脑”中执行此操作并且我是管理员。仍然遇到同样的错误。
SQL服务器详情
Microsoft SQL Server 2016 (RC1) - 13.0.1200.242 (X64) Mar 10 2016 16:49:45 Copyright (c) Microsoft Corporation Enterprise Evaluation Edition (64-bit) on Windows 10 Pro 6.3 (Build 10586: )
任何解决问题的建议将不胜感激
更新: 我已经配置了 Ad Hoc Distributed Queries
和
执行了以下查询
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
现在收到此错误
Msg 7438, Level 16, State 1, Line 7 The 32-bit OLE DB provider "Microsoft.Jet.OLEDB.4.0" cannot be loaded in-process on a 64-bit SQL Server.
查看 sp_configure/重新配置...
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
我有 MS Sql server 2012 和 Office 2013。这似乎很挑剔,所以您可能需要根据您的特定版本进行调整。
- 下载 Microsoft.ACE.OLEDB.12.0 for Windows,64 位版本可在此处找到:https://www.microsoft.com/en-us/download/details.aspx?id=13255
- 在您的服务器上安装它。
- 检查用户 运行 SQL 服务器并确保用户有权访问临时目录 C:\Windows\ServiceProfiles\LocalService\AppData\Local\Temp 如果它是本地服务帐户或 C:\Windows\ServiceProfiles\NetworkService\AppData\Local\Temp 如果它是网络服务帐户。
- 像这样配置 'Ad Hoc Distributed Queries' 并启用
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
有效!!!太谢谢了。 仅适用于 64 位 Win 服务器 2012R2。让我将整个工作脚本部分重复上面的部分(对我而言)不容易组合在一起:
下载 Microsoft.ACE.OLEDB.12.0 for Windows,64 位版本可在此处找到:https://www.microsoft.com/en-us/download/details.aspx?id=13255
创建包含相应列的 excel 文件(在本例中为名称和 class)。
运行 代码如下:
sp_configure 'show advanced options', 1; RECONFIGURE; GO sp_configure 'Ad Hoc Distributed Queries', 1; RECONFIGURE; GO -- Until SQL Server 2012 EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1 EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'AllowInProcess', 1 -- SQL Server 2014 or later EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'DynamicParameters', 1 EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
-- Now you can export to Excel 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 -- Or import from Excel select * from OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 8.0;Database=c:\targetWorkbook.xls;', 'SELECT * FROM [targetSheet$]')
请执行以下查询来解决此问题:
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