今天在做 64 位元的 SQL Server 使用 DB Link 到 SQL Server 2000 時,可以正確的連接到,可是在做查詢時,卻出現下面這種錯誤訊息:

無法為連結伺服器 TestDBName 的 OLE DB 提供者 "TestDBProvider" 取得結構描述資料列集 "DBSCHEMA_TABLES_INFO"。提供者支援介面,但在使用時傳回失敗碼。

根據 MSDN 當您嘗試從 64 位元 SQL Server 2005 用戶端對連結 32 位元 SQL Server 2000 伺服器執行分散式查詢時,可能會收到錯誤訊息,從這篇文章可以知道,在 64 位元的 SQL Server 中連結 32 位元 SQL Server 2000 進行分散式查詢時,若系統預存程序沒有升級為 SQL Server 2000 SP3 或 SQL Server 2000 SP4,就會出現此徵狀。

解決步驟

  1. SQL Server 2000 須更新至 SP4
  2. 在 SQL Server 2000 中開啟 Query Analyzer
  3. 在 master 資料庫上執行 SP4 所附的 instcat.sql 檔案
    • 檔案應位於 $(Program Files)\Microsoft SQL Server\MSSQL\Install 資料夾之下
    • 如果找不到,使用檔案搜尋應該就可以找到了(像我手邊的機器,SQL Server 就裝在 D 槽…)
    • 如果還是找不到,可以參考完整程式碼,我放了一份在 Gist 裡
  4. 執行完畢後,64 位元的 SQL Server 就可已使用 Query Analyzer 做查詢

code

詳請至 Github Gist poychang/instcat.sql


參考資料:


Poy Chang

Trial and Error