本文將介紹當您嘗試從 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】開啟資料庫匯入匯出精靈。
使用 SQL Server Native Client 10.0 來匯入資料,就可以順利把資料匯入到 SQL Server 2008 了。
【參考資料】