Sql server 2008 r2 从SQL server 2008r2创建链接服务器以访问2003

Sql server 2008 r2 从SQL server 2008r2创建链接服务器以访问2003,sql-server-2008-r2,ms-access-2003,linked-server,Sql Server 2008 R2,Ms Access 2003,Linked Server,我在ASP.NET中编写了一个web应用程序,它将所有数据存储在SQL Server 2008r2中,并通过存储过程运行所有内容。该应用程序正在为一个部门收集数据,该部门希望将2-3条数据推送到他们使用的旧应用程序中,该应用程序具有Microsoft Access 2003后端(.MDB文件)。我的想法是创建一个链接服务器来访问,这样我的应用程序就可以将所有内容推送到SQL server,并可以从那里进行处理(看起来很简单)。根据来自MSDN(和)的信息,我使用以下SQL命令创建链接服务器: E

我在ASP.NET中编写了一个web应用程序,它将所有数据存储在SQL Server 2008r2中,并通过存储过程运行所有内容。该应用程序正在为一个部门收集数据,该部门希望将2-3条数据推送到他们使用的旧应用程序中,该应用程序具有Microsoft Access 2003后端(.MDB文件)。我的想法是创建一个链接服务器来访问,这样我的应用程序就可以将所有内容推送到SQL server,并可以从那里进行处理(看起来很简单)。根据来自MSDN(和)的信息,我使用以下SQL命令创建链接服务器:

EXEC sys.sp_addlinkedserver@server=N'CMPtesting',
@datasrc=N'\\srv.local\SHAREDOCS\MPS\CMPdata.mdb',
@srvproduct=N'Access',
@provider=N'Microsoft.Jet.OLEDB.4.0'
这将成功完成,我可以在
server Objects->Linked Servers
下看到我的CMPtesting服务器。但是,如果我尝试使用以下方法验证服务器:

从[CMPtesting].master.sys.databases中选择名称
甚至只是查看表格,我都会遇到一个错误:

OLE DB提供程序“Microsoft.Jet.OLEDB.4.0”无法用于分布式查询,因为该提供程序已配置为在中运行 单线程单元模式。(Microsoft SQL Server,错误:7308)

通过研究该错误,我找到了“”建议安装一些不同的访问驱动程序,然后使用
@provider=N'Microsoft.ACE.OLEDB.12.0'
而不是Jet驱动程序。同样,这将成功完成,但尝试查看表会产生另一个错误:

无法为链接服务器“CMPtesting”创建OLE DB提供程序“Microsoft.ACE.OLEDB.12.0”的实例。(微软 SQL Server,错误:7302)

我知道这不仅仅是一个无效的驱动程序错误,因为如果我只是编一个提供者名称,我会得到以下结果:

OLE DB提供程序“foobar”尚未注册。(Microsoft SQL Server,错误:7403)


我不确定还可以尝试什么,因为我所有的搜索结果都显示了更多关于如何运行
sp_addlinkedserver
,而没有任何其他详细信息或帮助解决这些错误的内容。

首先,很抱歉您必须使用Access 2003…但是您有没有考虑过其他方法,可能是SSIS?你可能会有更好的运气。没有调查SSI。尽管这些改动应该是很小的,但添加一项新的技术,而这项技术在我的应用程序的任何其他部分都没有使用,这似乎是矫枉过正。有了这些麻烦,我可能最终会直接从应用程序转到MDB,但即使如此,在SSMS中编写和测试我的查询还是不错的,而不是Access混乱的查询生成器。Microsoft.Jet.OLEDB.4.0与64位不兼容,如果您运行的是64位版本的SQL 2008 R2,这可能会给您带来问题。有一些深入探讨这个问题的链接,以及可能的解决方法。