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

我想要使​​用查询将数据从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”不能用于分布式查询,因为提供程序被configuration为以单线程单元模式运行。

所以我search了谷歌,我得到的答案如下:

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

即使重新configuration后,它也显示出同样的错误…

根据这个线程 ,

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

假设您正在运行SQL Server 64位,您可能需要64位Microsoft Access数据库引擎2010 Redistributable

并且请注意,如果安装了另一个版本,则尝试安装该软件时会有轻微的皱纹。 在这种情况下,使用/ passive开关从命令行安装第二个版本。 根据这个线程 :

在当前Office安装以外的计算机上启动Microsoft ACE OLEDB Provider的安装(例如32上的32)将导致安装失败。 要使其正确运行,需要使用指定的“/ passive”参数从命令行启动它。

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

编辑:另外请确保提供商string使用“Microsoft.ACE.OLEDB.12.0”而不是“Microsoft.Jet.OLEDB.4.0”。 (道具@鲁米)

使用如下所示的SQL:

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