5

尝试在 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)".

我正在使用以下查询:

SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0; 
HDR=NO; IMEX=1; Database=\\filepath\filename.xlsx', 'SELECT * FROM [Sheet1$]')

有趣的是,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

运行它的帐户看起来具有 sa 访问权限。什么可能导致此问题?

4

4 回答 4

5

正如菲利普所说...首先检查 xp_cmdshell 的执行。如果由于权限问题而未运行,则首先通过运行重新配置此选项

SP_CONFIGURE 'XP_CMDSHELL',1
GO             
RECONFIGURE

在此之后运行以下命令以启用 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

现在运行这一系列命令:

sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE

如果遇到错误,则分别运行每个命令。最后通过运行下面提到的命令运行将所有 excel 数据导入 SQL 服务器:

SELECT * INTO TargetTableName FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
                         'Excel 12.0;Database=FilePath\fileName.xlsx;HDR=YES',
                         'SELECT * FROM [sheetName$]')

请记住,在 xls 的情况下,您必须使用 Jet Driver 而不是 ACE。而且 TargetTableName 在运行此查询之前不得存在。快乐编码:)

于 2013-11-06T20:53:00.200 回答
4

您是否尝试过(作为测试)将 Excel 文件复制到 SQL Server C:\ 驱动器并针对该路径执行查询?

当您进入服务器并在资源管理器/运行对话框中打开此路径时会发生什么:\filepath\filename.xlsx

您是否能够执行此查询:exec master..xp_cmdshell 'dir '\filepath\filename.xlsx'

这将帮助您确定这是否是网络权限问题,或者该帐户是否具有使用分布式查询的权限。

我的直觉是,这绝对是一个权限/权限问题,因为 DBA 可以运行它。

于 2013-04-05T08:52:56.300 回答
0

请使用正斜杠而不是反斜杠

Select * From OPENROWSET('MICROSOFT.ACE.OLEDB.12.0','EXCEL 12.0;DATABASE=//ComputerName/ShareMyLocation/DatabaseSheet.xlsx;IMEX=1','Select * From [SMDH-View2$]')
于 2018-07-19T08:27:51.587 回答
-1

SQL Server 管理工作室。在运行命令中键入 Services.msc 以打开服务窗口。

搜索 SQL Server 服务并右键单击它并选择属性。

在登录选项卡中,选择系统帐户/或选择您的域 ID 和帐户和密码。

一旦找到您的登录名,请按 OK。

现在在两个字段中输入您的登录密码。

重新启动服务,以便应用新的更改,如下图所示。

现在启动 SQL Server Management Studio 并尝试运行查询,如果仍然无法正常工作,请尝试重新启动系统。

或执行查询。

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 次

于 2015-07-24T08:00:17.713 回答