我需要获取记录总数以及分页。目前我正在 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 年起提供)允许在整个(无限)结果集上计算聚合,而无需进行GROUP
ing。
关于sql-server - 在 SQL Server 2012 中获取总计数和分页的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18119463/