在连接到 SQL 2000 数据库的 SQL 2008 上的链接服务器上运行查询时出错

在连接到 SQL 2000 数据库的 SQL 2008 上的链接服务器上运行查询时出错

我在链接服务器上执行了一个简单的查询,该查询使用一个跨两个服务器映射的用户,但出现了此错误。我尝试了测试链接服务器连接,一切正常。

令人困惑的是,我在 WEB 上偶然发现的一些东西是尝试使用 OPENQUERY,它确实有效。

当我执行未使用 OPENQUERY 方法的查询时返回以下错误。

链接服务器“xxx.xxx.xx”的 OLE DB 提供程序“SQLNCLI10”返回消息“未指定的错误”。

链接服务器“xxx.xxx.xx”的 OLE DB 提供程序“SQLNCLI10”返回消息“在服务器上找不到完成此操作所需的存储过程。请联系您的系统管理员。”。

消息 7311,级别 16,状态 2,第 2 行 无法获取链接服务器“192.168.9.5”的 OLE DB 提供程序“SQLNCLI10”的架构行集“DBSCHEMA_TABLES_INFO”。提供程序支持该接口,但在使用时会返回失败代码。

非常感谢

答案1

它正在尝试运行以下存储过程:

exec [mybase]..sp_tables_info_rowset_64 N'mytable', N'dbo', NULL

...但它在 32 位版本中不存在。您可以创建一个使用该 sp 名称的包装器,以调用 sp_tables_info_rowset 32​​ 位版本。

我相信这个问题已经在 2000 和 2005 的服务包中修复,因此如果可能的话请应用它。

答案2

下面的脚本是我用来创建所需存储过程 sp_tables_info_rowset_64 的脚本,它是 sp_tables_info_rowset 的包装器,它为我修复了相同的错误。在 SQL Server 2000 框上运行它。

use master
go

create procedure sp_tables_info_rowset_64

@table_name sysname,

@table_schema     sysname = null,

@table_type nvarchar(255) = null

as

declare @Result int set @Result = 0

exec @Result = sp_tables_info_rowset @table_name, @table_schema, @table_type

go

grant exec on sp_tables_info_rowset_64 to public

相关内容