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

前端之家收集整理的这篇文章主要介绍了sql-server – 在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

解决方法

如果我们被允许更改合同,您可以:
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年以来可用)允许在整个(无限制)结果集中计算聚合,而不需要分组.

猜你在找的MsSQL相关文章