我想从位于与我的SQL Server 2012实例相同的计算机上的Microsoft Access 2007数据库中查询Management Studio中的数据。我不想使用链接服务器来执行此操作,因为用户可以选择不同的Access数据库。我按照technet上的说明和我读过的其他来源说使用OPENROWSET
作为我想要的正确方法,但是当我在Management Studio中执行此操作时......
SELECT *
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'C:\Users\oliver.klosoff\Desktop\New folder\41000-13-0085 Consolidated Killers LLC.mdb';
'admin';'',tblTtlHrsFringes);
...我收到以下错误:
Msg 7302, Level 16, State 1, Line 1
Cannot create an instance of OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "(null)".
数据库没有为admin用户设置密码,admin用户有权读取此表。 Access 2007 32bit安装在64位的计算机上,以及SQL Server实例。我相信SQL Server可以访问数据库文件,因为当我执行此操作时,我得到1:
DECLARE @out INT
EXEC master.dbo.xp_fileexist 'C:\Users\oliver.klosoff\Desktop\New folder\41000-13-0085 Consolidated Killers LLC.mdb', @out OUTPUT
SELECT @out`
有没有办法做我想要完成的事情?
答案 0 :(得分:1)
最后,在几次尝试使用SQL Server"与#34; Access数据库 - 作为"链接服务器"在SSMS中或通过T-SQL中的OPENROWSET()
- 我发现this blog post提供了以下三(3)条建议。
ACE(或Jet)的OLE DB提供程序必须具有"动态参数"和"允许inprocess"选项已启用。在SSMS中,打开
服务器对象>链接服务器>提供商
分支,右键单击" Microsoft.ACE.OLEDB.12.0" (或" Microsoft.Jet.OLEDB.4.0"),选择"属性",并确保选择这些选项:
这是困扰我的那个。
显然,SQL Server需要在对Access数据库运行OLE DB查询时将信息写入临时文件。由于SQL Server作为服务运行,因此它使用运行服务的帐户的%TEMP%文件夹。
如果SQL Server服务在内置的"网络服务"帐户然后临时文件夹是
%SystemRoot%\ ServiceProfiles \ NetworkService \ AppData \ Local \ Temp
如果它是在内置的"本地服务"帐户然后临时文件夹是
%SystemRoot%\ ServiceProfiles \ LocalService \ AppData \ Local \ Temp
我的问题是SSMS在我的帐户下运行(不是网络服务)所以我只对Temp文件夹有读取权限
我授予自己对该文件夹的修改权限
并启用了另一个问题here中记录的OPENROWSET查询,即......
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE
GO
...我的查询工作正常:
虽然我不需要在我的情况下使用它,但前面提到的博客也声称要调整" -g memory_to_reserve" SQL Server服务的启动参数也可以帮助避免类似的错误。要做到这一点:
-g512;
添加到"启动参数"设置有关" memory_to_reserve"的详细信息;设置请参阅MSDN文章here。
答案 1 :(得分:1)
这应该有效
EXEC sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
EXEC sp_configure 'Ad Hoc Distributed Queries', 1;
GO
RECONFIGURE;
GO
USE [DatabaseName]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SELECT * FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0','Data Source="C:\Employees.accdb"')...tblEMPS;
答案 2 :(得分:0)
假设您安装了“Northwind”示例(并在下面提到的文件夹中),以下是否会运行?
SELECT CustomerID, CompanyName
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb';
'admin';'',Customers);
GO
不幸的是,自上次重新映像以来,我还没有重新安装SQL Server
答案 3 :(得分:0)
Microsoft.Jet.OLEDB.4.0
现在可能无效(2018年)。需要将AccessDatabaseEngine_X64.exe
或AccessDatabaseEngine.exe
下载到SQL服务器并安装它。然后使用Microsoft.ACE.OLEDB.12.0
。