SQL ERROR 7311解決方法

hexiaomail發表於2008-12-24

今天又遇到一個問題,建立一個Linked Server,在Management Studio可以展開它,看到檢視,用select竟查不到資料,而且出現錯誤:

Msg 7311, Level 16, State 2, Line 1
Cannot obtain the schema rowset "DBSCHEMA_TABLES_INFO" for OLE DB provider "SQLNCLI" for
linked server "". The provider supports the interface, but returns a
failure code when it is used.

查詢Microsoft相關說明,有如下說明:

從 64 位 SQL Server 2005 客戶端訪問 32 位 SQL Server 2000 伺服器可能會失敗
若要從 64 位 SQL Server 2005 客戶端對 32 位 SQL Server 2000 伺服器進行分散式查詢,則需要使用 SQL Server 2000 SP3 或更高版本。分散式查詢包括對您使用 sp_addlinkedserver 以及 OPENROWSET 和 OPENQUERY 函式定義的連結伺服器項的引用。另外,必須在 SQL Server 2000 SP3 和 SP4 伺服器上手動升級系統儲存過程(也稱為目錄儲存過程)。

如果 32 位例項的 SQL Server 2000 上的目錄儲存過程的版本未更新為隨此 Service Pack 釋出的版本,您將收到以下錯誤訊息:

 
"The stored procedure required to complete this operation could not be found on the server.
Please contact your system administrator."
Msg 7311, Level 16, State 2, Line 1
Cannot obtain the schema rowset "DBSCHEMA_TABLES_INFO" for OLE DB provider "SQLNCLI" for
linked server "". The provider supports the interface, but returns a
failure code when it is used.

 

若要解決此問題,則必須對 32 位例項的 SQL Server 2000 或 MSDE 執行該 Service Pack 的 instcat.sql 指令碼。

繼續看相關主題如下:

如果要解決這個問題,請在 32 位 SQL Server 2000 伺服器上安裝 SQL Server 2000 SP3 或 SQL Server 2000 SP4;然後,在 32 位 SQL Server 2000 伺服器上手動執行 SQL Server 2000 SP3 或 SP4 隨附的 Instcat.sql 指令碼。

使用 Windows 驗證模式
如果要使用「Windows 驗證」模式升級 SQL Server 2000 的 32 位例項上的系統預存程式,請依照下列步驟進行:
以 SQL Server sysadmin 固定伺服器角色成員的 Windows 帳戶登入計算機。
單擊 [執行],輸入 cmd.exe,然後單擊 [確定]。
在命令提示字元中輸入下列其中一個命令,然後按下 ENTER:

對於預設例項
osql -E -S -i \instcat.sql

對於具名例項
osql -E -S \ -i \instcat.sql

注意 代表連結的伺服器名稱、例項名稱以及含有 Instcat.sql 指令碼的資料夾完整路徑。根據預設,這個資料夾位於 C:\Program Files\Microsoft SQL Server\MSSQL\Install。

 

使用 SQL Server 驗證模式
如果要使用「SQL Server 驗證」模式升級 SQL Server 2000 的 32 位例項上的系統預存程式,請依照下列步驟進行:
使用任何 Windows 帳戶登入計算機。
單擊 [執行],輸入 cmd.exe,然後單擊 [確定]。
在命令提示字元中輸入下列命令,再按下 ENTER 鍵:
對於預設例項
osql -U -P -S -i \instcat.sql
對於具名例項
osql -U -P -S \ -i \instcat.sql

因為對方資料庫是人事系統,我想不太可能去要求他做什麼動作;

太鬱悶了,這不太可能吧!

因為時間緊,竟提出要求開發人員利用另一臺暫時做中轉,這不是辦法!!!!!

於是進一步研究,終於成功
利用openqery語句也可以查詢資料

SELECT * FROM OPENQUERY(, 'select * from ..')

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9932141/viewspace-521055/,如需轉載,請註明出處,否則將追究法律責任。

相關文章