mssql sqlserver 使用sql获取指定行数据及行总数的两种方法分享


摘要:
下文讲述不使用存储过程,只使用单一sql语句获取分页数据及复合条件的总行数的方法分享,如下所示:
实验环境:sql server 2008 R2


在平常的分页写法中,我们常常使用两条sql脚本,一条返回复合条件的数据,一条返回符合条件的总行数,
下文讲述使用单条sql语句实现以上需求的方法

返回符合条件的第60行到第70行的数据


方法1:使用开窗函数,返回分页数据和总条数

SELECT *,count(*) as [总行数]
FROM
    (
        SELECT  ROW_NUMBER() OVER (ORDER BY [排序字段] ) AS [序号],
          info FROM [maomao365.com] 
          WHERE  ----查询条件
    )   as tmp 
WHERE [序号] between 60 and 70


方法2:使用子查询的方式,返回分页数据和总条数

SELECT *
FROM
    (
        SELECT  ROW_NUMBER() OVER (ORDER BY [排序列]) AS [序号], info,
        (SELECT COUNT(*) FROM [maomao365.com] WHERE ---查询条件
         ) AS [总行数]
         FROM [maomao365.com] WHERE   ---查询条件
    )   as tmp 
WHERE [序号] between 60 and 70