SQL Server和Microsoft.ACE.OLEDB.12.0

时间:2017-07-03 19:16:15

标签: sql-server excel

我得到以下内容:

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

我已经完成了我在这个主题上找到的所有主题 - 但仍然遇到了问题

我已经确认:

  1. 加载64位Microsoft.ACE.OLEDB.12.0驱动程序

  2. Ad Hoc Distributed Queries设置为1

  3. 动态参数和允许进程均设置为1

  4. 将MSSQL更改为在我的帐户下运行

  5. 运行MSSQL的帐户和我使用的帐户都具有对C:\Windows\ServiceProfiles\LocalService\AppData\Local\Temp的完全访问权限

  6. 任何帮助将不胜感激。 -wmm

4 个答案:

答案 0 :(得分:1)

可悲的是,OPENROWSET被认为是ACE的错误。所以在尝试调整时要尝试一些不同的东西。添加和删​​除以下一些建议有望为您完成:

1)需要使用Excel 12.0 Xml;

调用xlsx文件

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更改为本地系统帐户以进行登录。

这就是我的所作所为:

  1. 确保Office和SQL Server具有相同的位宽(在我的情况下为64位)。

  2. 安装ACE provider for 64-bit(适用于32位的Jet)

  3. 配置服务器

    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 
    
  4. 配置SQL登录。在SQL Server配置管理器中

    • 打开服务器属性 - >登录 - >登录为:
    • 更改为内置帐户 - 本地系统
  5. 最后,这是我的疑问:

    SELECT * FROM OPENROWSET(
    'Microsoft.ACE.OLEDB.16.0'
    ,'Excel 12.0;Database=C:\Temp\Test.xlsx;HDR=YES'
    ,'SELECT * FROM [Sheet1$]')
    

答案 2 :(得分:0)

答案 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)。