环境: windows server 2008 r2
      sql server 2008 r2
      office 2007
      Ad Hoc Distributed Queries, xp_cmdshell已启用.
      msjetoledb40.dll已注册.使用OPENDATASOURCE查询Excel时提示以下错误,
(同样的Excel在SQL2000下可以查询,可排除文件问题)SELECT * FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source=D:\xxx.xls;User ID=Admin;Password=;Extended Properties=EXCEL 8.0;')...[Sheet1$] 
消息 7308,级别 16,状态 1,第 2 行
因为 OLE DB 访问接口 'Microsoft.Jet.OLEDB.4.0' 配置为在单线程单元模式下运行,
所以该访问接口无法用于分布式查询。

解决方案 »

  1.   

    如果是64为系统用64位的ACE驱动,方法google去一下就知道了
    下载地址是这个
    http://www.microsoft.com/downloads/en/details.aspx?familyid=7554f536-8c28-4598-9b72-ef94e038c891&displaylang=en
    调用方法参考
    select * FROM OPENROWSET ('Microsoft.ACE.OLEDB.12.0' ,'Excel 12.0;Database=C:\Test2.xlsx;HDR=YES' ,
    'SELECT * FROM [Sheet1$]' ) 就是把jet的链接关键字改掉
      

  2.   

    谢谢billpu的回复,现在不报7308错误了,
    但又出现 7302错误
    訊息 7302,層級 16,狀態 1,行 1
    无法建立连接服务器 "(null)" 的 OLE DB 提供者 "Microsoft.ACE.OLEDB.12.0"。
      

  3.   

    我以前用office2010也有这问题,不知道那里的问题,换成office2003就好了。
      

  4.   

    因为不清楚你的环境到底是32位还是64位,这个错误比较难判断,我也没有环境,也只能给点建议你试试看了
    1 你装了那个驱动了吗?如果有那就用那个,另外我也不清楚是不是装了驱动就可以用的,理论来说是这样的吧 :)或者你看看注册表项 在sqlserver分支下的provider下有没有
    2 确认excel文件没有打开或者不在进程中
    3 确认你的帐号有没有系统管理员权限(混合认证),c:\windows\temp目录,如果是用户名密码认证的那个(就要确认sqlserver启动账户对目录有权限
      

  5.   

    更正下那个注册表是sqlserver本身的provider,应该不是这里,windows应该可以看支持的数据驱动 但是我不清楚哪里可以看
      

  6.   

    64位,还是不行. 还有个问题,win 7专业版+sql server 2008 sp2
    opendatasource打开Excel时有时OK有时不OK,有时重启SQL Server Service后就OK.不知为何.