我正在执行这个openrowset函数:
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;Database=C:UsersJCPABALANDesktopData MigrationListOfDiscards.xlsx;HDR=YES',
'SELECT * FROM [Sheet1$]')
但它给了我以下错误
链接服务器"(空)"的 OLE DB 提供程序"Microsoft.ACE.OLEDB.12.0"返回消息"Microsoft Access 数据库引擎找不到对象 'Sheet1$'。确保对象存在,并且正确拼写其名称和路径名。如果"Sheet1$"不是本地对象,请检查网络连接或与服务器管理员联系。
Msg 7350,级别 16,状态 2,第 1
行 无法从链接服务器"(空)"的 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
但它仍然行不通。
错误消息分为两部分:
链接服务器"(空)"的 OLE DB 提供程序"Microsoft.ACE.OLEDB.12.0"返回消息"Microsoft Access 数据库引擎找不到对象 'Sheet1$'。确保对象存在,并且正确拼写其名称和路径名。如果"Sheet1$"不是本地对象,请检查网络连接或与服务器管理员联系。
和
Msg 7350,级别 16,状态 2,第 1 行 无法从链接服务器"(空)"的 OLE DB 提供程序"Microsoft.ACE.OLEDB.12.0"获取列信息。
第二部分是因为第一部分的错误,所以你的主要错误在第一部分,这告诉我们:
Microsoft Access 数据库引擎找不到对象"Sheet1$"。确保对象存在,并且正确拼写其名称和路径名。如果"Sheet1$"不是本地对象,请检查网络连接或与服务器管理员联系。
一些常见的原因和解决方案如下:
- 路径不存在:文件或路径
C:UsersJCPABALANDesktopData MigrationListOfDiscards.xlsx
不存在;注意:SQL Server
C:
指的是\ServerC$
,所以如果你使用的是SSMS,并且你注册了一个Server
并连接到它,那么你的路径就不存在了。
- 文件
权限被拒绝:文件或路径
C:UsersJCPABALANDesktopData MigrationListOfDiscards.xlsx
具有可以从 SQL Server 服务帐户访问它们的安全级别,您可以授予对 SQL Server 服务帐户的访问权限。
工作表名称无效:工作表
Sheet1
不是工作簿工作表中的有效工作表名称,您可以更改其名称。