當您嘗試從 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

 

【參考資料】