我想使用查询将数据从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
即使重新配置后,它也会向我显示相同的错误......
答案 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$]')