sql-server - 在 SQL Server 2012 中获取总计数和分页的更好方法

标签 sql-server pagination sql-server-2012

我需要获取记录总数以及分页。目前我正在 SQL Server 2012 中按照下面列出的方式进行操作。这需要一个单独的查询来获取计数。 SQL Server 2012有什么改进的方法吗?

ALTER PROCEDURE dbo.tpGetPageRecords
(
    @OffSetRowNo INT,     
    @FetchRowNo INT,
    @TotalCount INT OUT
) 
AS 

SELECT CSTNO, CSTABBR 
FROM DBATABC
WHERE CSTABBR LIKE 'A%'
ORDER BY CSTNO
OFFSET ( @OffSetRowNo-1 ) * @FetchRowNo ROWS
FETCH NEXT @FetchRowNo ROWS ONLY

SET @TotalCount = 
(SELECT COUNT(*)
FROM DBATABC
WHERE CSTABBR LIKE 'A%')


GO

最佳答案

如果我们被允许更改契约(Contract),您可以:

SELECT CSTNO, CSTABBR,COUNT(*) OVER () as TotalCount
FROM DBATABC
WHERE CSTABBR LIKE 'A%'
ORDER BY CSTNO
OFFSET ( @OffSetRowNo-1 ) * @FetchRowNo ROWS
FETCH NEXT @FetchRowNo ROWS ONLY

现在总计将作为结果集中的单独列提供。不幸的是,无法在同一语句中将此值分配给变量,因此我们无法再将其作为 OUT 参数提供。

这使用 OVER clause (自 2005 年起提供)允许在整个(无限)结果集上计算聚合,而无需进行GROUPing。

关于sql-server - 在 SQL Server 2012 中获取总计数和分页的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18119463/

相关文章:

sql-server - SQL Server 锁的问题

sql - 我在 Microsoft SQL Server 2014 中创建正确的触发器时遇到问题

python - 如何检查查询集是否为空?

php - Laravel 5 缓存/分页问题

sql - 授予者没有 GRANT 权限 - 问题

sql - 使用 T-SQL 以最小和最大日期分组

sql - 如何在 where 子句中获取多个条件

sql-server - SQL Server 函数返回最小日期(1753 年 1 月 1 日)

sql-server - 更好的优化查询

python - Twitter 用户关注者的随机页面