首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何根据单个查询中的where条件获取计数(*)和表数据

如何根据单个查询中的where条件获取计数(*)和表数据
EN

Stack Overflow用户
提问于 2021-09-26 10:53:19
回答 3查看 340关注 0票数 0

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

代码语言:javascript
运行
复制
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查询很大,并两次调用它,一次用于表,第二次用于计数,如上面所示。

只是想知道是否有一种我不知道的有效的方法,在一个查询中也不可能,而不是两次调用同一个查询?

我尝试了一种稍微不同的方式,这也在起作用,但仍然需要调用查询两次,执行的时间也是一样的:

代码语言:javascript
运行
复制
Select * ,
(select count(*) from tbl_test tt where tt.col1 = @param1) as TotalCount
from tbl_test tt where tt.col1 = @param1;

任何帮助都是非常感谢的,谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-09-26 11:38:07

如果要在同一记录集中返回计数而不返回多个记录集,则可以在over()中使用count()

例如

代码语言:javascript
运行
复制
select *, count(*) over() as Numrows
from tbl_test tt 
where tt.col1 = @param1;

或者,如果结果大于输出数据类型所建议的int值,

代码语言:javascript
运行
复制
select *, count_big(*) over() as Numrows
from tbl_test tt 
where tt.col1 = @param1;

同样,如果您希望保留第二个结果集,可以使用@@rowcountrowcount_big()将计数分配给您的输出变量。

票数 1
EN

Stack Overflow用户

发布于 2021-09-26 10:57:48

您可以使用

代码语言:javascript
运行
复制
SELECT @@ROWCOUNT;

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

您可以在https://learn.microsoft.com/vi-vn/sql/t-sql/functions/rowcount-transact-sql?view=sql-server-2017上了解更多信息。

票数 3
EN

Stack Overflow用户

发布于 2021-09-26 12:37:05

您可以使用COUNT()和OVER()实现您的目标。请检查下面的查询,不要忘记更改内容。您还可以在演示链接:http://sqlfiddle.com/#!18/d9c68/5中检查它。

代码语言:javascript
运行
复制
SELECT *, COUNT(*) OVER() as TotalRow
FROM tbl_test
WHERE Name LIKE '%Name%'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69334189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档