我有一个这样的存储过程:
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()将计数分配给您的输出变量。
发布于 2021-09-26 10:57:48
您可以使用
SELECT @@ROWCOUNT;如果行数超过20亿,请使用ROWCOUNT_BIG。
您可以在https://learn.microsoft.com/vi-vn/sql/t-sql/functions/rowcount-transact-sql?view=sql-server-2017上了解更多信息。
发布于 2021-09-26 12:37:05
您可以使用COUNT()和OVER()实现您的目标。请检查下面的查询,不要忘记更改内容。您还可以在演示链接:http://sqlfiddle.com/#!18/d9c68/5中检查它。
SELECT *, COUNT(*) OVER() as TotalRow
FROM tbl_test
WHERE Name LIKE '%Name%'https://stackoverflow.com/questions/69334189
复制相似问题