在从 SQL Server 2005 直接升级到 SQL Server 2012 后,许多用户会遇到一个棘手问题:尝试建立链接服务器连接一台旧版 SQL Server 2000 时,系统直接报错,提示类似于“SQL Server Native Client 11.0 不支持链接 SQL Server 2000 及更早版本”的信息。明明相同的配置在 SQL Server 2005 下运行正常,为何升级后就不再兼容?这是 SQL Server 2012 链接服务器常见故障之一。
先别急着怀疑环境配置,这里有一个容易被忽视的关键细节:SQL Server 2012 默认自带的 Native Client 是 11.0 版本,而微软从这一代开始正式停止了对 SQL Server 2000 及更早版本的原生支持。换言之,Native Client 11.0 的驱动程序在设计层面就已“切断了对旧版数据库的连接能力”。
不过,如果换个思路,解决 SQL Server 2012 无法连接 SQL Server 2000 的问题并不困难。在 SQL Server 2012 中,要连接其他 SQL Server 数据库,常见的做法是直接使用 SQLOLEDB 提供程序,例如下面这段代码:
exec sp_addlinkedserver 'ITSV', '', 'SQLOLEDB', 'serverip' exec sp_addlinkedsrvlogin 'ITSV', 'false', null, 'sa', 'password'
这段代码在 SQL Server 2000 上也能成功建立链接,但实际查询时仍会弹出错误,如下图所示:

仔细查阅微软官方关于 SQL Server Native Client 支持策略的文档后,会发现一个明确结论:Native Client 11.0 只支持 SQL Server 2005 及以上版本(包括 2008、2008 R2、2012 以及 Windows Azure SQL Database)。要兼容 SQL Server 2000,需要降级使用 Native Client 10.5 或 10.0 版本。
解决方案分为两步:首先下载并安装 SQL Server Native Client 10.0(或 10.5),然后在建立链接服务器时通过 MSDASQL 提供程序手动指定驱动。安装完成后,使用以下代码即可成功配置:
EXEC sp_addlinkedserver
@server='ITSV',
@srvproduct = 'sqlserver',
@provider = 'MSDASQL',
@datasrc = NULL,
@location = NULL,
@provstr = 'DRIVER={SQL Server Native Client 10.0};SERVER=serverip;',
@catalog = NULL
GO
EXEC sp_addlinkedsrvlogin
@rmtsrvname='ITSV',
@useself='false',
@rmtuser='sa',
@rmtpassword='password';
GO
注意 @provstr 参数中指定了 DRIVER={SQL Server Native Client 10.0},这样驱动就降级为 Native Client 10.0,后续使用方式与本地链接完全一致。如果下载的是 10.5,只需将驱动名称中的 10.0 改为 10.5 即可。
顺便提一下,SQL Server Native Client 的版本与兼容性有明确界定,不同版本支持的操作系统也各不相同。下面这个汇总表能帮助你快速判断:
| SQL Server Native Client 版本 | 支持的操作系统 |
|---|---|
| SQL Server Native Client (SQL Server 2005) | Microsoft Windows 2000 Service Pack 4 或更高版本 Microsoft Windows Server 2003 或更高版本 Microsoft Windows XP Service Pack 1 或更高版本 Microsoft Windows Vista(需安装 SQL Server Service Pack 2 或更高版本) Microsoft Windows Server 2008(需安装 SQL Server Service Pack 2 或更高版本) |
| SQL Server Native Client 10.0 (SQL Server 2008) | Microsoft Windows Server 2003 Service Pack 2 或更高版本 Microsoft Windows XP Service Pack 2 或更高版本 Microsoft Windows Vista Microsoft Windows Server 2008 |
| SQL Server Native Client 10.5 (SQL Server 2008 R2) | Microsoft Windows Server 2003 Service Pack 2 或更高版本 Microsoft Windows XP Service Pack 2 或更高版本 Microsoft Windows Vista Microsoft Windows Server 2008 Microsoft Windows 7 |
| SQL Server Native Client 11.0 (SQL Server 2012) | Microsoft Windows Vista Microsoft Windows Server 2008 Microsoft Windows 7 Microsoft Windows 8 Microsoft Windows Server 2012 |
总结来说:遇到 SQL Server 2012 无法通过链接服务器连接 SQL Server 2000 的情况,根本原因在于 Native Client 11.0 不再向下兼容。寻找一个承载 Native Client 10.0 或 10.5 的驱动程序,安装后使用 MSDASQL 提供程序显式指定该驱动,问题即可迎刃而解。在迁移过程中如果还遇到其他异常,不妨先检查驱动版本与操作系统的匹配关系。
