我在链接服务器上执行了一个简单的查询,该查询使用一个跨两个服务器映射的用户,但出现了此错误。我尝试了测试链接服务器连接,一切正常。
令人困惑的是,我在 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