创建到本地实例的环回链接服务器,确保启用数据访问。假设您有一个名为的本地命名实例YourServer\SQL2008
:
USE [master];
GO
EXEC sp_addlinkedserver
@server = N'LoopbackLocal',
@srvproduct = N'',
@provider = N'SQLNCLI',
@datasrc = N'.\SQL2008',
@catalog = N'tempdb';
GO
EXEC sp_serveroption
@server = N'LoopbackLocal',
@optname = N'collation compatible',
@optvalue = N'true';
GO
EXEC sp_serveroption
@server = N'LoopbackLocal',
@optname = N'data access',
@optvalue = N'true';
GO
EXEC sp_addlinkedsrvlogin
@rmtsrvname = N'LoopbackLocal',
@locallogin = NULL ,
@useself = N'True';
GO
-- you may need to configure other security here
然后,您可以使用它OPENQUERY
来运行存储过程,就好像它是一个即席查询一样。
SELECT COUNT(*)
FROM OPENQUERY
(
LoopbackLocal,
'EXEC dbo.my_sp'
) AS y;
现在,如果dbo.my_sp
首先将信息转储到#temp 表中,您将会遇到问题,因为它不再是OPENQUERY
可以处理的代码块。例如,如果您尝试以sp_who2
这种方式执行,至少在 SQL Server 2012 中,您将收到一个已更改为使用的错误sp_describe_first_result_set
(OPENQUERY
所以也许现在这对您有用,我没有 2008 来测试,但它总有一天会成为一个问题):
消息 11526,级别 16,状态 1,过程 sp_describe_first_result_set,第 1 行
无法确定元数据,因为 ... 使用临时表。
但是,如果您要经常这样做,为什么不制作专门的存储过程(或向这些存储过程添加选项)以便只返回一个计数?