当您尝试从 SQL Server 2005 / 2008 建立 Linked Server 连接 SQL Server 2000 进行分散式查询时,发生错误消息的可能解决方式

本文将介绍当您尝试从 SQL Server 2005 / 2008 建立 Linked Server 连接 SQL Server 2000 进行分散式查询时,发生错误消息的可能解决方式。


今天在论坛上看到有人问到尝试在 SQL Server 2005 / 2008 中利用下列 T-SQL 建立 Linked Server 连接 SQL Server 2000 并进行查询时,发生错误消息。

   1:  EXEC sp_addlinkedserver
   2:  @server='db1',
   3:  @srvproduct='',         
   4:  @provider='SQLOLEDB',
   5:  @datasrc='192.168.1.6'
   6:   
   7:  select *
   8:  from db1.master.dbo.sysobjects

【错误消息】

   1:  OLE DB provider "SQLNCLI10" for linked server "db1" returned message "无法指出的错误".
   2:  OLE DB provider "SQLNCLI10" for linked server "db1" returned message "The stored procedure required to complete this operation could not be found on the server. Please contact your system administrator.".
   3:  Msg 7311, Level 16, State 2, Line 1
   4:  Cannot obtain the schema rowset "DBSCHEMA_TABLES_INFO" for OLE DB provider "SQLNCLI10" for linked server "db1". The provider supports the interface, but returns a failure code when it is used.

发生这个问题的原因在于 SQL Server 2000 的系统预存进程没有升级到 SP3 或 SP4,您必须在安装完 SQL Server 2000 SP3 / SP4 之后手动执行  Instcat.sql,您可以透过乱马客所说的【 当您尝试从 64 位 SQL Server 2005 用户端对连结 32 位 SQL Server 2000 服务器执行分散式查询时,可能会收到错误消息】 这篇 KB 来解决这个错误消息。

【补充说明】

若您只是单纯想要导入数据到 SQL Server 2005 / 2008,或许也可以换种方式,透过数据库导入导出精灵(SQL Server Import and Export Wizard)来把 SQL Server 2000 的数据导入。下图为 SQL Server 2008 R2 的画面,您可以从【Object Explorer > Databases > 数据库名称 > Tasks > Import Data】开启数据库导入导出精灵。

image

使用 SQL Server Native Client 10.0 来导入数据,就可以顺利把数据导入到 SQL Server 2008 了。

image

【参考数据】

  • 当您尝试从 64 位 SQL Server 2005 用户端对连结 32 位 SQL Server 2000 服务器执行分散式查询时,可能会收到错误消息
  • How can you add a SQL Server 2008 linked server to SQL Server 2000