加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 16:48:17 所属栏目:MsSql教程 来源:网络整理
导读:我有要求得到记录的总数以及分页.目前,我正在SQL Server 2012中列出如下所示.这需要一个单独的查询才能得到计数. SQL Server 2012中有没有改进的方法? ALTER PROCEDURE dbo.tpGetPageRecords( @OffSetRowNo INT,@FetchRowNo INT,@TotalCount INT OUT) AS SEL
我有要求得到记录的总数以及分页.目前,我正在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年以来可用)允许在整个(无限制)结果集中计算聚合,而不需要分组.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读