Openrowset函数失败

时间:2014-11-19 00:40:51

标签: sql-server sql-server-2008 tsql openrowset aceoledb

我正在执行这个openrowset函数:

SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
    'Excel 12.0;Database=C:\Users\JCPABALAN\Desktop\Data Migration\ListOfDiscards.xlsx;HDR=YES', 
    'SELECT * FROM [Sheet1$]')

但它给了我以下错误

  

OLE DB提供程序" Microsoft.ACE.OLEDB.12.0"对于链接服务器"(null)"返回消息" Microsoft Access数据库引擎找不到对象' Sheet1 $'。确保对象存在,并且您正确拼写其名称和路径名称。如果' Sheet1 $'不是本地对象,请检查您的网络连接或联系服务器管理员。"。
  Msg 7350,Level 16,State 2,Line 1
  无法从OLE DB提供程序获取列信息" Microsoft.ACE.OLEDB.12.0"对于链接服务器"(null)"。

我已将Ad Hoc Distributed Queries设置为1并安装了Microsoft ACE并执行了以下代码行:

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1 
GO 
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1 
GO

但它仍然没有成功。

1 个答案:

答案 0 :(得分:2)

您的错误消息包含两部分:

  

OLE DB提供程序" Microsoft.ACE.OLEDB.12.0"对于链接服务器"(null)"返回消息" Microsoft Access数据库引擎找不到对象' Sheet1 $'。确保对象存在,并且您正确拼写其名称和路径名称。如果' Sheet1 $'不是本地对象,请检查您的网络连接或联系服务器管理员。"。

  

Msg 7350,Level 16,State 2,Line 1   无法从OLE DB提供程序获取列信息" Microsoft.ACE.OLEDB.12.0"对于链接服务器"(null)"。

第二部分是因为第一部分的错误,所以你的主要错误是第一部分,它告诉我们:

  

Microsoft Access数据库引擎找不到对象' Sheet1 $'。确保对象存在,并且您正确拼写其名称和路径名称。如果' Sheet1 $'不是本地对象,请检查您的网络连接或联系服务器管理员。

一些常见的原因和解决方案是:

  • 路径不存在:文件或路径C:\Users\JCPABALAN\Desktop\Data Migration\ListOfDiscards.xlsx不存在;

      注意: SQL Server C:\指的是\\Server\C$,因此,如果您使用SSMS并注册了Server并且正在连接它,那么您的路径是不存在。
  •   
  
  • 文件权限被拒绝:文件或路径C:\Users\JCPABALAN\Desktop\Data Migration\ListOfDiscards.xlsx具有可以从SQL Server服务帐户访问它们的安全级别,您可以授予对SQL Server服务帐户的访问权限。

  • 工作表名称无效:工作表Sheet1不是工作簿工作表中的有效工作表名称,您可以更改其名称。