2

我正在执行这个 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 行
无法从链接服务器“(null)”的 OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”获取列信息。

我已经将其设置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

但它仍然行不通。

4

1 回答 1

3

您的错误消息有两个部分:

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

消息 7350,级别 16,状态 2,第 1 行无法从链接服务器“(null)”的 OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”获取列信息。

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

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

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

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

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

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

于 2015-04-12T11:47:48.543 回答