1. sqlserver2008不支持关键字limit ,所以它的分页sql查询语句将不能用mysql的方式进行,幸好sqlserver2008提供了toprownumber等关键字,这样就能通过这几个关键字实现分页。
  2.  
  3. 下面是本人在网上查阅到的几种查询脚本的写法:
  4.  
  5. 几种sqlserver2008高效分页sql查询语句
  6. top方案:
  7. sql code
  8.  
  9. select top 10 * from table1
  10. where id not in(select top 开始的位置 id from table1)
  11.  
  12. max:
  13. sql code
  14.  
  15. select top 10 * from table1
  16. where id>(select max(id)
  17. from (select top 开始位置 id from table1 order by id)tt)
  18.  
  19. row:
  20. sql code
  21.  
  22. select *
  23. from (
  24. select row_number()over(order by tempcolumn)temprownumber,*
  25. from (select top 开始位置+10 tempcolumn=0,* from table1)t
  26. )tt
  27. where temprownumber>开始位置
  28. 3种分页方式,分别是max方案,top方案,row方案
  29.  
  30. 效率:
  31. 1row
  32. 2max
  33. 3top
  34.  
  35. 缺点:
  36. max:必须用户编写复杂sql,不支持非唯一列排序
  37. top:必须用户编写复杂sql,不支持复合主键
  38. row:不支持sqlserver2000
  39.  
  40. 测试数据:
  41. 320万条数据,每页显示10条数据,分别测试了2万页、15万页和32万页。
  42.  
  43. 页码,top方案,max方案,row方案
  44. 2万,60ms46ms33ms
  45. 15万,453ms343ms310ms
  46. 32万,953ms720ms686ms
  47.  
  48. 是一种通过程序拼接sql语句的分页方案,
  49. 用户提过的sql语句不需要编写复杂的sql逻辑
  50.  
  51. 诺用户提供sql如下
  52. sql code
  53. select * from table1
  54.  
  55. 从第5条开始,查询5条,处理后sql变为
  56. sql code
  57. select *
  58. from (
  59. select row_number()over(order by tempcolumn)temprownumber,*
  60. from (select top 10 tempcolumn=0,* from table1)t
  61. )tt
  62. where temprownumber>5
  63.  
  64. 这是什么意思呢?分解一下
  65.  
  66. 首先将用户输入的sql语句转稍稍修改
  67. select后添加top 开始位置+条数变成
  68. 再外加一列tempcolum,变成这样
  69. sql code
  70. select top 20 tempcolumn=0,* from clazz
  71.  
  72. 嵌套一层,这样便可查询出行号
  73. 刚才那个列就是用来这里order by用的
  74. (也不知道sqlserverrow_number函数为什么必须要order by
  75. sql code
  76. select row_number()over(order by tempcolumn)temprownumber,*
  77. from (修改过的查询)t
  78.  
  79. 再套一层,过滤掉行号小于开始位置的行
  80. sql code
  81. select * from (第二层)tt
  82. where temprownumber>10

SqlServer分页总结-摘抄的更多相关文章

  1. sqlserver分页;mysql分页;orcale分页 的sql 查询语句

    一,sqlserver分页: )) ID FROM 表名 AS 表名1_1 ORDER BY ID)) ORDER BY ID; 二:mysql分页 )*每页显示的数据条数,当前页码 * 每页显示的数 ...

  2. SQLServer分页查询存储过程

    项目中用到的SQLServer分页查询存储过程. [存储过程] create PROCEDURE prcPageResult -- 获得某一页的数据 -- @currPage int = 1,     ...

  3. sqlserver 分页模糊查询

       积少成多 ----  仅以此致敬和我一样在慢慢前进的人儿 问题: 在sqlserver 进行模糊查询,出现问题 最初使用“concat”,进行拼串操作,如下所示: <select id = ...

  4. 高效的SQLSERVER分页查询的几种示例分析

    Sqlserver数据库分页查询一直是Sqlserver的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID.YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页查询 ...

  5. 真正高效的SQLSERVER分页查询(多种方案)

    Sqlserver数据库分页查询一直是Sqlserver的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID.YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页查询 ...

  6. 四种方式实现SQLServer 分页查询

    SQLServer 的数据分页: 假设现在有这样的一张表:CREATE TABLE test( id int primary key not null identity, names varchar( ...

  7. SQLSERVER分页查询

    转:http://blog.csdn.net/qiaqia609/article/details/41445233   Sqlserver数据库分页查询一直是Sqlserver的短板,   第一种方案 ...

  8. Sqlserver分页的问题

    好久没有用SqlServer了,今天写了一个分页,遇到了小问题,本着温故而知新的道理,再来随便写些什么吧. 语句是这样的 string sql=“select * from ( select*,(ro ...

  9. 常用的几种 SQLServer 分页查询方式实现

    SQLServer 的数据分页: 假设现在有这样的一张表:CREATE TABLE test( id int primary key not null identity, names varchar( ...

随机推荐

  1. html 调用ActiveX

    html网页调用ActiveX控件时,要获取到ActiveX的ClassID,这个ClassID是注册到系统里的,而不是工程中的uuid,(下图为uuid). 正确的是在注册表的HKEY_CLASSE ...

  2. 第二百零四节,jQuery EasyUI,Dialog(对话框)组件

    jQuery EasyUI,Dialog(对话框)组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解EasyUI中Dialog(窗口)组件的使用方法,这个组件依赖 ...

  3. JavaWeb——监听器

    监听器简介 监听器是指专门用于在其他对象身上发生的事件或者状态改变进行监听和相应处理的对象,当被监听的对象发生变化时立即采取相应的行动. 例如我们要实现统计一个网站的在线人数,就可以在Web应用应用程 ...

  4. SmartStoreNet解图

    概述: Ioc: Autofac 1. 通过继承, 对MVC的Controller的加强.

  5. library和libraryTarget使用场景组件开发

    https://segmentfault.com/q/1010000004676608 https://github.com/zhengweikeng/blog/issues/10

  6. flask渲染模板

    Flask自身使用了jinja2模板,可以使用render_template()方法来渲染模板,只需要将模板名和关键字的参数传入. 该渲染模板的模块(views.py)会在 templates 文件夹 ...

  7. Innodb间隙锁,细节讲解(转)

    关于innodb间隙锁,网上有很多资料,在此不做赘述,我们讲解一下关于innodb的间隙锁什么情况下会产生的问题. 网上有些资料说innodb的间隙锁是为了防止幻读,这个论点真的是误人子弟.了解inn ...

  8. python之range和xrange

    range 前面小节已经说明了,range([start,] stop[, step]),根据start与stop指定的范围以及step设定的步长,生成一个序列. 比如: 1 >>> ...

  9. rabbitmq 3.6.11 centos 7 安装

    http://www.rabbitmq.com/releases/erlang/erlang-19.0.4-1.el7.centos.x86_64.rpm http://www.rabbitmq.co ...

  10. join-case

    SELECT trd.* ,(CASE WHEN ta.AccountID IS null THEN '' ELSE ta.AccountID END ) FROM traceroleid trd L ...