创建一个存储过程,用于返回另一个存储过程的行数。

4

能否实现这个功能?我的源存储过程中有一些过滤器,我真的不想在另一个存储过程中重复它,只是为了获取行数。


你能给个例子吗?你可以调用存储过程并对结果进行计数。 - Robert
3个回答

6
我知道的唯一方法是从存储过程中插入到临时表中,然后选择计数。不幸的是,在存储过程上执行“select”没有简便的方法。
CREATE TABLE #stuff (id int, status char(6))
INSERT #stuff (id, status)
EXEC dbo.sp_get_stuff

SELECT count(*) FROM #stuff

DROP TABLE #stuff

编辑

以上方法可以让您从存储过程中选择,但正如Greg所指出的那样,行数可以简化为:

EXEC dbo.sp_get_stuff
SELECT @@Rowcount

5
为什么要使用临时表,而@@ROWCOUNT可以很好地工作,几乎没有性能开销,并且更简单易用? - Greg Beech
1
@Greg - 有没有一种方法只返回行数而不是同时返回结果和行数?我正在尽可能地微调它。谢谢! - Mike Cole

3
这也是有效的:

这也是有效的:

create proc pTest1
as
select * from comp
go

create proc pTest2
as
exec pTest1
select @@rowcount
GO

有没有办法只返回行数而不是同时返回结果和行数?我正在尽可能地优化它。谢谢! - Mike Cole
不容易,你可以像LFSR所说的那样,在本地表中捕获结果集。此外,请参见这里https://dev59.com/U3RB5IYBdhLWcg3wgHWr。 - edosoft
GO通常标志着一段SQL代码的结束。我想这是出于习惯的力量。 - edosoft

1
如果你真的想尽可能地进行微调,那么你必须更改存储过程的源代码。如果你关注性能,那么仅为了获取计数而返回行集是不值得考虑的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接