use*_*918 5 sql-server excel sql-server-2008
尝试在SQL Server 2008 r2 64位中打开Excel文件时出现以下错误:
Msg 7399, Level 16, State 1, Line 1
The OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)"
reported an error. The provider did not give any information about the error.
Msg 7303, Level 16, State 1, Line 1
Cannot initialize the data source object of OLE DB provider
"Microsoft.ACE.OLEDB.12.0" for linked server "(null)".
Run Code Online (Sandbox Code Playgroud)
我正在使用以下查询:
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;
HDR=NO; IMEX=1; Database=\\filepath\filename.xlsx', 'SELECT * FROM [Sheet1$]')
Run Code Online (Sandbox Code Playgroud)
有趣的是,DBA可以毫无问题地运行它.我已经完成并运行了以下查询:
sp_configure 'Show Advanced Options', 1;
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
GO
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
GO
Run Code Online (Sandbox Code Playgroud)
运行它的帐户看起来像是具有访问权限.可能导致此问题的原因是什么?
正如Philip所说的...首先检查xp_cmdshell的执行。如果由于权限问题而未在运行,则首先通过运行重新配置此选项
SP_CONFIGURE 'XP_CMDSHELL',1
GO
RECONFIGURE
Run Code Online (Sandbox Code Playgroud)
运行此命令之后,请为ACE驱动程序的InProcess功能启用链接服务器权限:
USE [master]
GO
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
Run Code Online (Sandbox Code Playgroud)
现在运行以下一系列命令:
sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE
Run Code Online (Sandbox Code Playgroud)
如果遇到错误,则分别运行每个命令。最后运行以下命令,将所有的excel数据导入到SQL Server中:
SELECT * INTO TargetTableName FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;Database=FilePath\fileName.xlsx;HDR=YES',
'SELECT * FROM [sheetName$]')
Run Code Online (Sandbox Code Playgroud)
请记住,如果使用xls,则必须使用Jet Driver而不是ACE。并且在运行此查询之前,TargetTableName一定不存在。快乐的编码:)
您是否尝试过(作为测试)将 Excel 文件复制到 SQL Server C:\ 驱动器并针对该路径执行查询?
当您进入服务器并在资源管理器/运行对话框中打开此路径时会发生什么:\filepath\filename.xlsx?
您是否能够执行此查询:exec master..xp_cmdshell 'dir '\filepath\filename.xlsx'?
这将帮助您确定是否是网络权限问题,或者该帐户是否具有使用分布式查询的权限。
我的直觉是,这绝对是一个权限/许可问题,因为 DBA 可以运行它。