首页 > 解决方案 > 如何在单个查询中根据 where 条件获取 Count(*) 和表数据

问题描述

我有一个这样的存储过程:

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

在上面的例子中,我将根据两个查询中的位置获取表数据和总行数。这工作正常,但在我的实际情况下,选择查询很大并且调用它两次,一次用于表,第二次用于计数,如上所示是花费时间。

只是想知道是否有任何有效的方法可以做到这一点,我不知道并且可以在单个查询中而不是两次调用同一个查询?

我尝试了一些不同的方式,这也有效,但仍然涉及调用查询两次并且执行时间相同:

Select * ,
(select count(*) from tbl_test tt where tt.col1 = @param1) as TotalCount
from tbl_test tt where tt.col1 = @param1;

任何帮助表示赞赏,谢谢。

标签: sqlsql-server

解决方案


您可以使用

SELECT @@ROWCOUNT;

如果行数超过 20 亿,请使用ROWCOUNT_BIG.

您可以在https://docs.microsoft.com/vi-vn/sql/t-sql/functions/rowcount-transact-sql?view=sql-server-2017找到更多信息


推荐阅读