zoukankan      html  css  js  c++  java
  • 四种方式实现SQLServer 分页查询

    原文转自:http://www.cnblogs.com/Bulid-For-NET/archive/2012/12/16/2820097.html

    SQLServer 的数据分页:

    假设现在有这样的一张表:
    CREATE TABLE test
    (
     id int primary key not null identity,
     names varchar(20)
    )
    然后向里面插入大约1000条数据,进行分页测试
    假设页数是10,现在要拿出第5页的内容,查询语句如下:
    --10代表分页的大小
    select top 10 *
    from test
    where id not in
    (
     --40是这么计算出来的:10*(5-1)
     select top 40 id from test order by id
    )
    order by id
    原理:需要拿出数据库的第5页,就是40-50条记录。首先拿出数据库中的前40条记录的id值,然后再拿出剩余部分的前10条元素


    第二种方法:
    还是以上面的结果为例,采用另外的一种方法
    --数据的意思和上面提及的一样
    select top 10 *
    from test
    where id >
    (
     select isnull(max(id),0)
     from 
      (
       select top 40 id from test order by id
      ) A
    )
    order by id
    原理:先查询前40条记录,然后获得其最id值,如果id值为null的,那么就返回0
    然后查询id值大于前40条记录的最大id值的记录。
    这个查询有一个条件,就是id必须是int类型的。


    第三种方法:
    select top 10 *
    from 
    (
     select row_number() over(order by id) as rownumber,* from test
    ) A
    where rownumber > 40
    原理:先把表中的所有数据都按照一个rowNumber进行排序,然后查询rownuber大于40的前十条记录
    这种方法和oracle中的一种分页方式类似,不过只支持2005版本以上的

    第四种:
    存储过程查询
    创建存储过程
    alter procedure pageDemo
    @pageSize int,
    @page int
    AS
    declare @temp int
    set @temp=@pageSize*(@page - 1)
    begin
     select top (select @pageSize) * from test where id not in (select top (select @temp) id from test) order by id
    end
    执行存储过程
    exec 10,5

    QQ:309488423 Email:leiliu_lucfer@163.com
  • 相关阅读:
    在日本被禁止的コンプガチャ設計
    Starling常见问题解决办法
    Flixel引擎学习笔记
    SQLSERVER中修复状态为Suspect的数据库
    T4 (Text Template Transformation Toolkit)实现简单实体代码生成
    创建Linking Server in SQL SERVER 2008
    Linq to Sql 与Linq to Entities 生成的SQL Script与分页实现
    Linq to Entity 的T4 模板生成代码
    在VisualStudio2008 SP1中调试.net framework 源代码
    使用HttpModules实现Asp.net离线应用程序
  • 原文地址:https://www.cnblogs.com/leiliu-lucifer/p/5290195.html
Copyright © 2011-2022 走看看