这里面介绍一下常用的分页方法:

1.使用top来分页

  1. select top @pageSize * from table where id not in
  2. (select top @pageSize*(@pageIndex-1) id from table)

2.使用 ROW_NUMBER()OVER

  1. SELECT * FROM (SELECT ROW_NUMBER() OVER (order by T.字段名 desc )AS Row, T.*  from 表名 T  WHERE 条件 ) TT WHERE TT.Row between 起始位置  and 结束位置;
  2. StringBuilder strSql = new StringBuilder();
  3. strSql.Append("SELECT * FROM ( ");
  4. strSql.Append(" SELECT ROW_NUMBER() OVER (");
  5. if (!string.IsNullOrWhiteSpace(orderby.Trim()))
  6. {
  7. strSql.Append("order by T." + orderby);
  8. }
  9. else
  10. {
  11. strSql.Append("order by T.ID desc");
  12. }
  13. strSql.Append(")AS Row, T.*  from TableName T ");
  14. if (!string.IsNullOrWhiteSpace(strWhere.Trim()))
  15. {
  16. strSql.Append(" WHERE " + strWhere);
  17. }
  18. strSql.Append(" ) TT");
  19. strSql.AppendFormat(" WHERE TT.Row between {0} and {1}", startIndex, endIndex);

3.使用分页存储过程

  1. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sys_Page_v2]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
  2. drop procedure [dbo].[sys_Page_v2]
  3. GO
  4. CREATE PROCEDURE [dbo].[sys_Page_v2]
  5. @PCount int output,    --总页数输出
  6. @RCount int output,    --总记录数输出
  7. @sys_Table nvarchar(100),    --查询表名
  8. @sys_Key varchar(50),        --主键
  9. @sys_Fields nvarchar(500),    --查询字段
  10. @sys_Where nvarchar(3000),    --查询条件
  11. @sys_Order nvarchar(100),    --排序字段
  12. @sys_Begin int,        --开始位置
  13. @sys_PageIndex int,        --当前页数
  14. @sys_PageSize int        --页大小
  15. AS
  16. SET NOCOUNT ON
  17. SET ANSI_WARNINGS ON
  18. IF @sys_PageSize < 0 OR @sys_PageIndex < 0
  19. BEGIN
  20. RETURN
  21. END
  22. DECLARE @new_where1 NVARCHAR(3000)
  23. DECLARE @new_order1 NVARCHAR(100)
  24. DECLARE @new_order2 NVARCHAR(100)
  25. DECLARE @Sql NVARCHAR(4000)
  26. DECLARE @SqlCount NVARCHAR(4000)
  27. DECLARE @Top int
  28. if(@sys_Begin <=0)
  29. set @sys_Begin=0
  30. else
  31. set @sys_Begin=@sys_Begin-1
  32. IF ISNULL(@sys_Where,'') = ''
  33. SET @new_where1 = ' '
  34. ELSE
  35. SET @new_where1 = ' WHERE ' + @sys_Where
  36. IF ISNULL(@sys_Order,'') <> ''
  37. BEGIN
  38. SET @new_order1 = ' ORDER BY ' + Replace(@sys_Order,'desc','')
  39. SET @new_order1 = Replace(@new_order1,'asc','desc')
  40. SET @new_order2 = ' ORDER BY ' + @sys_Order
  41. END
  42. ELSE
  43. BEGIN
  44. SET @new_order1 = ' ORDER BY ID DESC'
  45. SET @new_order2 = ' ORDER BY ID ASC'
  46. END
  47. SET @SqlCount = 'SELECT @RCount=COUNT(1),@PCount=CEILING((COUNT(1)+0.0)/'
  48. + CAST(@sys_PageSize AS NVARCHAR)+') FROM ' + @sys_Table + @new_where1
  49. EXEC SP_EXECUTESQL @SqlCount,N'@RCount INT OUTPUT,@PCount INT OUTPUT',
  50. @RCount OUTPUT,@PCount OUTPUT
  51. IF @sys_PageIndex > CEILING((@RCount+0.0)/@sys_PageSize)    --如果输入的当前页数大于实际总页数,则把实际总页数赋值给当前页数
  52. BEGIN
  53. SET @sys_PageIndex =  CEILING((@RCount+0.0)/@sys_PageSize)
  54. END
  55. set @sql = 'select '+ @sys_fields +' from ' + @sys_Table + ' w1 '
  56. + ' where '+ @sys_Key +' in ('
  57. +'select top '+ ltrim(str(@sys_PageSize)) +' ' + @sys_Key + ' from '
  58. +'('
  59. +'select top ' + ltrim(STR(@sys_PageSize * @sys_PageIndex + @sys_Begin)) + ' ' + @sys_Key + ' FROM '
  60. + @sys_Table + @new_where1 + @new_order2
  61. +') w ' + @new_order1
  62. +') ' + @new_order2
  63. print(@sql)
  64. Exec(@sql)
  65. GO

SQL server 分页方法小结的更多相关文章

  1. SQL Server游标 C# DataTable.Select() 筛选数据 什么是SQL游标? SQL Server数据类型转换方法 LinQ是什么? SQL Server 分页方法汇总

    SQL Server游标   转载自:http://www.cnblogs.com/knowledgesea/p/3699851.html. 什么是游标 结果集,结果集就是select查询之后返回的所 ...

  2. SQL SERVER 分页方法

    最近项目中需要在SQL SERVER中进行分页,需要编写分页查询语句.之前也写过一些关于分页查询的语句,但是性能不敢恭维.于是在业务时间,在微软社区Bing了一篇老外写的关于SQL SERVER分页的 ...

  3. SQL Server 分页方法汇总

    PageSize = 30 PageNumber = 201 方法一:(最常用的分页代码, top / not in) UserId UserId from UserInfo order by Use ...

  4. SQL server分页的四种方法

    SQL server分页的四种方法 1.三重循环: 2.利用max(主键); 3.利用row_number关键字: 4.offset/fetch next关键字 方法一:三重循环思路  先取前20页, ...

  5. SQL server分页的四种方法(算很全面了)

      这篇博客讲的是SQL server的分页方法,用的SQL server 2012版本.下面都用pageIndex表示页数,pageSize表示一页包含的记录.并且下面涉及到具体例子的,设定查询第2 ...

  6. 解决hibernate对Sql Server分页慢的问题

    一.hibernate分页 hibernate对MsSql的伪分页 分页是web项目中比不可少的一个功能,数据量大的时候不能全部展示必然要用到分页技术.相信大家对hibernate中的分页都不陌生: ...

  7. SQL Server BCP使用小结

    原文:SQL Server BCP使用小结 用法: bcp {dbtable )   );GO--输出XML格式化文件--说明一下:-t","是指定字段分隔符,稍后我们会讲到exe ...

  8. 干货 | SSMS客户端连接京东云RDS SQL Server配置方法

    干货 | SSMS客户端连接京东云RDS SQL Server配置方法 原创: 于振江 京东云开发者社区  微软SQL Server, Oracle数据库以及MySQL系列占据了关系型数据库市场的绝对 ...

  9. SQL Server分页模板

    SQL Server分页模板 WITH T AS ( SELECT ROW_NUMBER() OVER(ORDER BY AlbumId ) AS row_number, * FROM (SELECT ...

随机推荐

  1. oracle trim函数用法详解

    在oracle数据库中,trim一般都是用在删除字符串两边的空格.实际上,trim也可以用来删除字符串两边的指定字符.并且trim指定删除的字符串只能是单个字符Oracle TRIM函数是很常见的函数 ...

  2. 支付宝接口错误:您使用的私钥格式错误,请检查RSA私钥配置,charset = utf-8

    调试支付宝条码支付的时候碰到个错误:您使用的私钥格式错误,请检查RSA私钥配置,charset = utf-8, 原因是我代码里的那私钥是直接复制pem文件里的代码的,可支付宝底层的sdk中默认是以文 ...

  3. docker 安装MySQL远程连接

    1. 下载Mysql的Docker镜像: $ docker search mysql (搜索mysql镜像) $ docker pull mysql (下载mysql镜像,默认最新版本) 2. 运行镜 ...

  4. 菜鸟学SSH(六)——Spring事务管理

    Spring是SSH中的管理员,负责管理其它框架,协调各个部分的工作.今天一起学习一下Spring的事务管理.Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource.Tran ...

  5. 沐雪多用户微信公众平台开发源码,商城小程序源码(2018年最新的asp.net C# 微信源码,小程序源码)

    现售价5400元,就可以搭建自己的微信平台啦 购买地址:https://item.taobao.com/item.htm?id=539102325336 该系统是由[上海沐雪网络]独家授权销售,其他地 ...

  6. 模拟 SQLSERVER 死锁

    环境: sqlserver 2008   事务(进程 ID (n))与另一个进程被死锁在锁资源上,并且已被选作死锁牺牲品.请重新运行   死锁原理: 如两个任务 任务1,已经锁定R1,再进行请求R2& ...

  7. HBase写入性能改造(续)--MemStore、flush、compact参数调优及压缩卡的使用【转】

    首先续上篇测试:   经过上一篇文章中对代码及参数的修改,Hbase的写入性能在不开Hlog的情况下从3~4万提高到了11万左右. 本篇主要介绍参数调整的方法,在HDFS上加上压缩卡,最后能达到的写入 ...

  8. JSch远程执行脚本

    JSch远程执行脚本 2017-02-24 在自动化测试的时候,需要远程操控服务器做一些操作,比如切日.起服务器.执行某些脚本.如何实现? 我们可以利用JSch,远程执行脚本.JSch是Java Se ...

  9. Windows系统盘瘦身指南

    [本文出自天外归云的博客园] Windows系统的C盘空间越来越小,按以下四步进行清理,还你6个G: 1.开启腾讯管家之类的软件进行第一轮垃圾清理: 2.删除以下文件夹,"C:\Progra ...

  10. 设计模式之工厂方法模式(代码用Objective-C展示)

    前面一篇展示了一个简单工厂模式,这一篇主要是对比,工厂方法模式比简单工厂模式好在哪里?为什么要用这个模式?这个模式的精髓在哪里? 就以计算器为例,结果图如下: 加减乘除运算都是继承自基类运算类,然后工 ...