SQL Server 2008 64Bit 透過Link Server 的方法連結到SQL Server 2000 32Bit.無法正常使用
連結數據庫方法如下:
sp_addLinkedserver @server='linkedSQLDB',@srvproduct='SQLOLEDB',@provider='SQLOLEDB',@datasrc ='sqlserver1',@catalog=N'master' EXEC sp_addlinkedsrvlogin 'linkedSQLDB', --被访问的服务器别名 'false', NULL, 'sa', --帐号 'sa' --密码 sp_dropserver @server='linkedSQLDB' 移除
當在SQL Server 64位上執行
select * from linkedSQLDB.master.dbo.sysobjects
會出錯:
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 (訊息 7311,層級 16,狀態 2,行 1)
Cannot obtain the schema rowset "DBSCHEMA_TABLES_INFO" for OLE DB provider "SQLNCLI" for linked server "<LinkedServerName>".The provider supports the interface, but returns a failure code when it is used. (無法為連結伺服器 <LinkedServerName> 的 OLE DB 提供者 "SQLNCLI" 取得結構描述資料列集 "DBSCHEMA_TABLES_INFO"。提供者支援介面,但在使用時傳回失敗碼。)
原因:
64位和32位有一些系統的存儲過程不一致,有兼容性問題。
解決方法:
1.把SQL Server2000升級到sp3或sp4
2.把sp裡的instcat.sql找出來,在sql server2000裡手動執行。
3.問題解決
注:
我在測試過程中,把sp4裡的instcat.sql放在 sql server2000 sp3服務器裡執行後,問題同樣解決
micosoft裡的說明如下:
http://support.microsoft.com/kb/906954/
參考:
http://www.dotblogs.com.tw/jamesbi/archive/2010/11/19/19546.aspx