【问题标题】:Openrowset function failureOpenrowset 函数失败
【发布时间】:2014-11-19 00:40:50
【问题描述】:

我正在执行这个 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$]')

但它给了我以下错误

链接服务器“(null)”的 OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”返回消息“Microsoft Access 数据库引擎找不到对象 'Sheet1$'。请确保该对象存在并且您拼写其名称和路径名正确。如果“Sheet1$”不是本地对象,请检查您的网络连接或联系服务器管理员。”。
消息 7350,第 16 级,状态 2,第 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

但还是不行。

【问题讨论】:

  • 路径“C:\Users\JC...”是否与 SQL Server 在同一台计算机上? SQL Server 服务帐户是否有权访问它?

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


【解决方案1】:

你的错误信息有两部分:

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

消息 7350,第 16 级,状态 2,第 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 并正在连接到它,那么您的路径不存在。1234565 >
  • 文件权限被拒绝:文件或路径C:\Users\JCPABALAN\Desktop\Data Migration\ListOfDiscards.xlsx 具有您可以从 SQL Server 服务帐户访问它们的安全级别,您可以授予对 SQL Server 服务帐户的访问权限。 p>

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

【讨论】:

  • 感谢您的回答@shA.t
  • 文件导出到服务器。如果你想在其他电脑上导出,请查看这个答案(关于数据库备份文件,但原理相同)stackoverflow.com/questions/16491/…
猜你喜欢
  • 2021-11-29
  • 2012-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-19
  • 2016-07-13
  • 2021-08-07
相关资源
最近更新 更多