一、问题现象
SQLserver上有一个Linkserver,在Management Studio可以展开它,可以看到其链接的schema,但是使用select语句查询时,会报如下的错误:
OLE DB provider "SQLNCLI10" for linked server "xxx" returned message "Unspecified error".
OLE DB provider "SQLNCLI10" for linked server "xxx" returned message "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 2
Cannot obtain the schema rowset "DBSCHEMA_TABLES_INFO" for OLE DB provider "SQLNCLI10" for linked server "xxx". The provider supports the interface, but returns a failure code when it is used.
二、原因解析
若要从 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.
三、解决方法
1、在32位SQL Server 2000服务器安装相应补丁,并升级其系统预存程序
如果是SQL Server 2005,要在 32 位SQL Server 2000 服务器上安裝 SQL Server 2000 SP3 或 SQL Server 2000 SP4;然后,在 32 位 SQL Server 2000 服务器上手动执行 SQL Server 2000 SP3 或 SP4 随附的 Instcat.sql 脚本。(具体方法参考文末链接)
如果是SQL Server 2008,则必须在32位SQL Server 2000服务器上安装SQL Server 2000 SP4;然后,执行Instcat.sql脚本。
2、使用可替代的SQL语句
SELECT * FROM OPENQUERY(Linkserver, 'select * from ..');
参考文档:
http://blog.itpub.net/9932141/viewspace-521055/
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30776559/viewspace-2148164/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/30776559/viewspace-2148164/