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$]')