我得到以下内容:
Msg 7399,Level 16,State 1,Line 1 OLE DB提供程序“Microsoft.ACE.OLEDB.12.0”用于链接服务器“(null)”报告错误。提供商未提供有关错误的任何信息。消息7303,级别16,状态1,行1无法为链接服务器“(null)”初始化OLE DB提供程序“Microsoft.ACE.OLEDB.12.0”的数据源对象。
当我从SQLServer中的存储过程执行以下操作时 -
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=c:\Users\v-bimoss\Source\Workspaces\External\Onesite\URLoadDB\Templates\T1-Current.xlsx', 'SELECT * FROM [Sheet1$]')
我已经完成了我在这个主题上找到的所有主题 - 但仍然遇到了问题
我已经确认:
加载64位Microsoft.ACE.OLEDB.12.0驱动程序
Ad Hoc Distributed Queries设置为1
动态参数和允许进程均设置为1
将MSSQL更改为在我的帐户下运行
运行MSSQL的帐户和我使用的帐户都具有对C:\Windows\ServiceProfiles\LocalService\AppData\Local\Temp
的完全访问权限
任何帮助将不胜感激。 -wmm
答案 0 :(得分:1)
可悲的是,OPENROWSET被认为是ACE的错误。所以在尝试调整时要尝试一些不同的东西。添加和删除以下一些建议有望为您完成:
1)需要使用Excel 12.0 Xml;
2)HDR=YES;
判断是否存在标题记录。如果存在并且你有数字,它会崩溃。如果没有标题,请更改为NO。
3)IMEX=1;
这允许混合的数字和文本字段。如果人们开始用你的数字混合字母。
4)基于ACE 12.0和ACE 14.0可能存在注册表问题。仔细检查你的版本。
5)最后,比奇怪的更奇怪......当你有评论(或没有评论)时,OPENROWSET会崩溃。如果您有--comment
,请在短划线后加一个空格,-- comment
它有时会有所帮助。因此,如果您有评论,请尝试删除它们或重新排列它们,您可能会感到惊讶。 (我知道......这真的是一种令人悲伤的事情。)
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0 Xml;HDR=YES;IMEX=1;Database=c:\Users\v-bimoss\Source\Workspaces\External\Onesite\URLoadDB\Templates\T1-Current.xlsx', 'SELECT * FROM [Sheet1$]')
无论如何,由于OPENROWSET可能有点不稳定,你可能想要使用与登台表或csv文件等不同的方法导入数据。但是如果你让它工作,那就非常好了。
希望有所帮助:)
答案 1 :(得分:1)
我遇到了同样的问题。在经历了许多安装提供商的答案,处理神秘错误之后,当我没有立即收到错误时,我有一个短暂的快乐 - 而查询从未返回...
我终于浪费了一天多的时间才开始工作。最后的修复是将SQL Server更改为本地系统帐户以进行登录。
这就是我的所作所为:
确保Office和SQL Server具有相同的位宽(在我的情况下为64位)。
安装ACE provider for 64-bit(适用于32位的Jet)
配置服务器
USE [MSDB]
GO
sp_configure 'show advanced options', 1
GO
RECONFIGURE WITH OverRide
GO
sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE WITH OverRide
GO
USE [master]
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.16.0', N'AllowInProcess', 1
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.16.0', N'DynamicParameters', 1
GO
配置SQL登录。在SQL Server配置管理器中
最后,这是我的疑问:
SELECT * FROM OPENROWSET(
'Microsoft.ACE.OLEDB.16.0'
,'Excel 12.0;Database=C:\Temp\Test.xlsx;HDR=YES'
,'SELECT * FROM [Sheet1$]')
答案 2 :(得分:0)
我会检查这两个步骤,但特别是检查和更改运行SQL Server的用户:
Cannot create an instance of OLE DB provider Microsoft.Jet.OLEDB.4.0 for linked server null
The OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)"
答案 3 :(得分:0)
像您一样,我尝试了所有事情,当我发现excel文件中的工作表必须具有名称并且必须用 DOLLAR 符号(如 > [mysheet $] 。
这是我的openrowset语句,终于可以使用了:
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.16.0', 'Excel 12.0;Database=\\svr\dir\myfile.xlsx;HDR=YES', 'SELECT * FROM [mysheet$]')
我们正在使用SQL Server 2014 64位,并使用了最新的ACE提供程序(版本16)。