我有一个这样的存储过程:
create procedure sp_testsp
@param1 nvarchar(800),
@count bigint output
as
begin
select * from tbl_test tt where tt.col1 = @param1;
set @count = select Count(*) from tbl_test tt where tt.col1 = @param1;
end在上面的ex中,我将根据两个查询中的位置获取表数据和总行数。这很好,但在我的实际示例中,select查询很大,并两次调用它,一次用于表,第二次用于计数,如上面所示。
只是想知道是否有一种我不知道的有效的方法,在一个查询中也不可能,而不是两次调用同一个查询?
我尝试了一种稍微不同的方式,这也在起作用,但仍然需要调用查询两次,执行的时间也是一样的:
Select * ,
(select count(*) from tbl_test tt where tt.col1 = @param1) as TotalCount
from tbl_test tt where tt.col1 = @param1;任何帮助都是非常感谢的,谢谢。
发布于 2021-09-26 11:38:07
如果要在同一记录集中返回计数而不返回多个记录集,则可以在over()中使用count()
例如
select *, count(*) over() as Numrows
from tbl_test tt
where tt.col1 = @param1;或者,如果结果大于输出数据类型所建议的int值,
select *, count_big(*) over() as Numrows
from tbl_test tt
where tt.col1 = @param1;同样,如果您希望保留第二个结果集,可以使用@@rowcount或rowcount_big()将计数分配给您的输出变量。
https://stackoverflow.com/questions/69334189
复制相似问题