如何在SELECT T-SQL命令中包含结果集中返回的行总数?

qua*_*rkX 19 sql t-sql sql-server

我想询问是否有一种方法可以使用Row_Number(SQL 2005)命令在TSQL查询的返回结果集中包含总行数(作为附加列).例如,以类似于以下的形式从Book表中获取查询结果集:

RowNum   BookId     BookTitle    TotalRows
--------------------------------------------
1        1056       Title1       5    
2        1467       Title2       5    
3        121        Title3       5    
4        1789       Title4       5    
5        789        Title5       5
Run Code Online (Sandbox Code Playgroud)

该查询是存储过程中实现的自定义分页功能的一部分.目标是仅返回当前页面索引的记录并限制为页面大小,还要返回select语句中的记录总数,以确定结果集页面的总数.

Jon*_*our 19

在SQL Server 2008及更高版本中,添加COUNT(*)OVER()作为查询中的列名称之一,并将使用返回的总行填充.它在每一行中重复,但至少可以获得该值.许多其他解决方案不起作用的原因在于,对于非常大的结果集,在迭代所有行之后,您将不知道总数,这在许多情况下是不实际的(尤其是顺序处理解决方案).例如,在调用第一个IDataReader.Read()之后,此技术为您提供总计数.

select COUNT(*) OVER () as Total_Rows, ... from ...
Run Code Online (Sandbox Code Playgroud)

  • 除此之外通常不会给您准确的计数.加入其他表可能会导致结果大错. (2认同)

Mar*_*ers 13

在SQL Server 2005及更高版本中,您可以使用CTE执行此操作:

WITH result AS (SELECT ... your query here ...)
SELECT
    *,
    (SELECT COUNT(*) FROM result) AS TotalRows
FROM result
Run Code Online (Sandbox Code Playgroud)

一般来说,我建议不要这样做,但如果你真的需要,那么这就是怎么做的.


Ric*_*uen 1

也许您正在寻找的是@@ROWCOUNT