OLE DB提供程序“Microsoft.Jet.OLEDB.4.0”不能用于分布式查询

时间:2014-02-26 05:03:12

标签: sql sql-server excel

我想使用查询将数据从Excel导入SQL Server,而不是使用向导。我试过这个问题:

Select * INTO g FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 12.0;Database=D:\new.xlsx;HDR=YES', 'SELECT * FROM [newSheet$]');

但是,我收到了这个错误:

  

Msg 7308,Level 16,State 1,Line 1
  OLE DB提供程序“Microsoft.Jet.OLEDB.4.0”不能用于分布式查询,因为提供程序配置为在单线程单元模式下运行。

所以我在Google上搜索过,得到了如下答案:

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
GO
RECONFIGURE;
GO

即使重新配置后,它也会向我显示相同的错误......

2 个答案:

答案 0 :(得分:30)

根据this thread

  

64位操作系统不支持Microsoft.Jet.OLEDB.4.0

假设您运行的是64位SQL Server,您可能需要 64位Microsoft Access Database Engine 2010 Redistributable

请注意,如果已安装其他版本,则在尝试安装软件时会出现轻微的皱纹。在这种情况下,使用 / passive 开关从命令行安装第二个版本。根据{{​​3}}:

  

在具有非当前安装的Office安装的计算机上启动Microsoft ACE OLEDB Provider的安装(例如,64 on 64)将导致安装失败。要使其正常运行,您需要从命令行启动它,并指定“/ passive”参数。

这是在谈论现有的Office安装,但同样适用于共存的数据库引擎安装。

编辑:还要确保使用“Microsoft.ACE.OLEDB.12.0”而不是“Microsoft.Jet.OLEDB.4.0”作为提供程序字符串。 (@Rumi的道具)

答案 1 :(得分:-1)

使用如下SQL:

  SELECT * into temptable FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 12.0;Database=D:\new.xlsx','select * from [sheet1$]')