T-SQL分页查询语句

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了T-SQL分页查询语句相关的知识,希望对你有一定的参考价值。

使用 ROW_NUMBER(),SQL Server版本要求2005及以上。

    SELECT * FROM 
    ( 
        SELECT *,ROW_NUMBER() OVER(ORDER BY UserID) AS RowNum FROM TableName
    ) AS T WHERE RowNum > (@PageIndex-1)*@PageSize AND RowNum<=@PageIndex*@PageSize

 若要带上条件筛选,那么 WHERE 语句就需要写在括号中。

    SELECT * FROM 
    ( 
        SELECT *,ROW_NUMBER() OVER(ORDER BY UserID) AS RowNum FROM TableName WHERE A=B AND C=D
    ) AS T WHERE RowNum > (@PageIndex-1)*@PageSize AND RowNum<=@PageIndex*@PageSize

 

 

利用SQL Server新特性 OFFSET ROW FETCH NEXT ONLY,SQL Server版本要求2012及以上。

SELECT * from TableName  ORDER BY UserID OFFSET (@PageIndex-1)*@PageSize ROW FETCH NEXT @PageSize ONLY

 

使用Row_NUMBER() 的方式从其名称上就很好理解,就是先给原数据加上个编号(RowNum),然后在WHERE条件语句里做筛选,简单实用又很好记忆的一个分页方法。

利用SQL Server新特性的方法理解起来更直观,跳过(OFFSET)N行(ROW)后,只取接下来的(FETCH NEXT)N行。

两者的性能对比可以参考园友 hukn 写的这篇文章 SQL Server 2012使用OFFSET/FETCH NEXT分页及性能测试 。

新特性中 ORDER BY 的字段如果不具有唯一性,那么将会出现分页过程中取到重复数据的情况,不是知道这是BUG还是它特性就是如此。情况详细来源于 passingwind 写的文章 SQL 2012 新特性 offset ,fetch next only 。

以上是关于T-SQL分页查询语句的主要内容,如果未能解决你的问题,请参考以下文章

C# T-SQL 语句包含“with(nolock)”错误

T-SQL分页功能存储过程

T-SQL查询语句

T-SQL查询语句

利用T-SQL语句创建数据表

T-SQL简单查询语句(模糊查询)