Openrowset函数失败

3

我正在执行这个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)"返回消息"The Microsoft Access database engine could not find the object 'Sheet1$'. Make sure the object exists and that you spell its name and the path name correctly. If 'Sheet1$' is not a local object, check your network connection or contact the server administrator."。 Msg 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

但它仍然无法正常工作。

路径 "C:\Users\JC..." 是否与 SQL Server 在同一台计算机上?SQL Server 服务帐户是否有访问权限? - Nick.McDermaid
1个回答

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

Msg 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 Server C:\指的是\\Server\C$,所以如果您正在使用SSMS并注册了一个服务器,并且正在连接到它,则路径不存在。
文件权限被拒绝:文件或路径C:\Users\JCPABALAN\Desktop\Data Migration\ListOfDiscards.xlsx具有安全级别,您可以从SQL Server服务帐户访问它们。您可以授予SQL Server服务帐户访问权限。
工作表名称无效:工作簿中的工作表Sheet1不是有效的工作表名称。您可能需要更改其名称。

感谢您的回答,@shA.t。 - user3709209
文件已在服务器上导出。如果您希望在其他电脑上导出,请查看此答案(它是关于数据库备份文件的,但原理相同)https://dev59.com/rXVD5IYBdhLWcg3wU5-H#20465401 - TPAKTOPA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接