zoukankan      html  css  js  c++  java
  • Sql 分页三种方式

    create database Test
    go
    use Test
    go
    
    create Table UserInfo(
        userid int identity(1,1) primary key,
        username nvarchar(10) not null
        
    )
    
    insert into UserInfo values ('a11')
    insert into UserInfo values ('a12')
    insert into UserInfo values ('a13')
    insert into UserInfo values ('a14')
    insert into UserInfo values ('a15')
    insert into UserInfo values ('a16')
    insert into UserInfo values ('a17')
    
    
    select * from UserInfo
    
    declare @pagesize int
    declare @currentPage int
    set @pagesize = 3
    set @currentPage = 3
    
    select top (@pagesize) * from Userinfo 
    where userid 
    not in(
    select top 
    (@pagesize*(@currentPage-1))
     userid
     from UserInfo) 
      
     
    --第一页:因为不需要对数据过滤,
    --所以只取PagSize数量的记录
    
    --第二页:步骤:
    --1.取前两页的数据 selct top @pagesize *@currentPage
    --2.过滤掉第一页的数据 
    
    
    --第二种方法:如果ID是连续,完全不用top
    --直接用id就可以
    
    create table #tempUserInfo
    (
        id int identity(1,1) primary key,
        userid int not null,
        username nvarchar(10) not null
    )
    
    insert into #tempUserInfo 
    select * from UserInfo
    
    declare @pagesize int
    declare @currentPage int
    set @pagesize = 3
    set @currentPage = 2
    select * from #tempUserInfo
    where id between 
    (@currentPage -1)*@pagesize +1 
    and @pagesize * @currentPage
    
    
    
    --第三种
    --rownumber()函数是sql server2005才有
    declare @pagesize int
    declare @currentPage int
    set @pagesize = 3
    set @currentPage = 3
    select * from (select ROW_NUMBER() over (order by userid) as HangHao,
    * 
    from UserInfo) pageduserinfo
    where HangHao between 
    (@currentPage -1)*@pagesize +1 
    and @pagesize * @currentPage
    --效率问题:第一张绝对比第三种低。
    --理论上第二种效率最高,但不推荐用,
    --要实现的话,一般是用存储过程
    
    --个人推荐:用第三种方式
    --SqlServer:ROwNumber
    --MySql:limit
    --Oracle :序列:Sequence
    View Code
      public List<Xml_Parameters> BuildTaskXML(string sAccount, int pageNum,int pageSize = 20)
        {
            return  BulidTaskXMLC(sAccount).Skip(pageSize * (pageNum - 1)).Take(pageSize).ToList();
    
        }
  • 相关阅读:
    为TextBox定义快捷键
    (转)再谈“我是怎么招聘程序员的”
    (转)jQuery框架学习第二天:jQuery中万能的选择器
    (转)MongoDB学习笔记(一) MongoDB介绍及安装
    asp.net 导出CSV
    领域驱动设计下系统层次结构风格(转载)
    (转)谈谈数据加密的处理提供各种算法处理
    (转)REST服务开发实战
    领域驱动设计系列文章(2)——浅析VO、DTO、DO、PO的概念、区别和用处
    (转)你的工作不是命令人们去做什么
  • 原文地址:https://www.cnblogs.com/youchim/p/5563099.html
Copyright © 2011-2022 走看看