无法为链接服务器null创建OLE DB提供程序Microsoft.Jet.OLEDB.4.0的实例

时间:2016-05-02 16:55:52

标签: sql sql-server export-to-excel openrowset

我正在尝试从Table数据导出到ExcelT-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)”。

所以通过互联网寻求解决方案,得到以下链接

https://blogs.msdn.microsoft.com/spike/2008/07/23/ole-db-provider-microsoft-jet-oledb-4-0-for-linked-server-null-returned-message-unspecified-error/

在上面的链接中,他们说我们需要管理员在 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”   服务器

4 个答案:

答案 0 :(得分:33)

好的,我让它对我有用,看起来我今天会发帖。

我有MS Sql server 2012和Office 2013.这看起来非常挑剔,因此您可能需要适应您的特定版本。

  1. 下载适用于Windows的Microsoft.ACE.OLEDB.12.0,64位版本:https://www.microsoft.com/en-us/download/details.aspx?id=13255
  2. 将其安装在您的服务器上。
  3. 检查运行SQL Server的用户,并确保用户有权访问临时目录C:\ Windows \ ServiceProfiles \ LocalService \ AppData \ Local \ Temp,如果它是本地服务帐户或C:\ Windows \ ServiceProfiles \ NetworkService \ AppData \ Local \ Temp,如果它是网络服务帐户。
  4. 配置“Ad Hoc Distributed Queries”并启用Microsoft.ACE.OLEDB文件,如下所示:
  5. 这是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

http://blog.sqlauthority.com/2010/11/03/sql-server-fix-error-ms-jet-oledb-4-0-cannot-be-used-for-distributed-queries-because-the-provider-is-used-to-run-in-apartment-mode/

答案 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