1.两种方式

1.1:row_number() over()函数

SELECT TOP 页大小 *
   FROM( SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNumber,* FROM table1 )as A 
   WHERE RowNumber > 页大小*(页数-1)
   
   --注解:首先利用Row_number()为table1表的每一行添加一个行号,给行号这一列取名'RowNumber' 在over()方法中将'RowNumber'做了升序排列
   --然后将'RowNumber'列 与table1表的所有列 形成一个表A
   --重点在where条件。假如当前页(currentPage)是第2页,每页显示10个数据(pageSzie)。那么第一页的数据就是第11-20条
   --所以为了显示第二页的数据,即显示第11-20条数据,那么就让RowNumber大于 10*(2-1)

1.2:OFFSET ....FETCH

OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS }

指定在从查询表达式中开始返回行之前,将跳过的行数。OFFSET 子句的参数可以是大于或等于零的整数或表达式。ROW 和 ROWS 可以互换使用。

FETCH { FIRST|NEXT } <行计数表达式> { ROW|ROWS } ONLY

指定在处理 OFFSET 子句后,将返回的行数。FETCH 子句的参数可以是大于或等于 1 的整数或表达式。ROW 和 ROWS 可以互换使用。同样,FIRST 和 NEXT 可以互换使用。

每页10条,查询第10页的数据

select * from (select row_number() over(order by U_sortNo) as Rm,* from A01 where u_areacode='130000') as t where 100<Rm and Rm<=110

SELECT A0100,COUNT(1) OVER() AS total
FROM A01
where u_areacode='130000'
ORDER BY U_sortNo
OFFSET 100 ROWS FETCH NEXT 10 ROWS ONLY

说明跳过100行不包括第100条数据,并查出来之后的10的数据,也就是101-110中的十条数据

        /// 分页
/// </summary>
/// <param name="pageIndex">获取当前页码默认为1</param>
/// <param name="pageSize">获取每页显示多少条记录</param>
public string GetUserList(int pageIndex, int pageSize,string orderField, string orderType)
{
int count;
string sql = @"select a.*,b.Title,b.Content from Power_user a
left join Knowledge b on a.ID = b.CreateUserID";
string strsql = string.Format("select * from ({0}) T_TT where 1=1 ", sql);
StringBuilder stringBuilder = new StringBuilder();
int num = (pageIndex-) * pageSize;
int num2 = pageIndex * pageSize;
string str;
if (!string.IsNullOrEmpty(orderField))
{
str = "Order By " + orderField + " " + orderType;
}
else
{
str = "order by (select 0)";
}
stringBuilder.Append("Select * From (Select ROW_NUMBER() Over (" + str + ")");
stringBuilder.Append(string.Concat(new object[]
{
" As rowNum, * From (",
strsql,
") As T ) As N Where rowNum > ",
num,
" And rowNum <= ",
num2
}));
count = System.Convert.ToInt32(SqlHelper.ExecuteScalar(SqlHelper.ConnectionString, CommandType.Text, "Select Count(1) From (" + strsql + ") As t", null)); ;
DataTable dt = SqlHelper.ExecuteDataTable(SqlHelper.ConnectionString, CommandType.Text, stringBuilder.ToString(), null);
string Json = JsonConvert.SerializeObject(dt);
List<Power_User> userModel = SqlHelper.ExecuteClass<Power_User>(SqlHelper.ConnectionString, strsql, null);
//string b = JsonConvert.SerializeObject(userModel);
return Json;
}

//分页效果最差

SELECT TOP 页大小 *
   FROM table1
   WHERE id NOT IN --where条件语句限定要查询的数据不是子查询里面包含的数据。即查询"子查询"后面的10条数据。即当前页的数据
           (
              --如果当前页是第二页,每页显示10条数据,那么这里就是获取当前页前面的所有数据。
              SELECT TOP 页大小*(当前页-1) id FROM table1 ORDER BY id
           )
   ORDER BY id

sql中的分页实现的更多相关文章

  1. sql中对查询出来的数据进行分页

    当sql中存储的数据量比较大时,在web中 数据显示时都会对数据进行分页,分页不会在客户端进行分页,而是在数据库查询过程中进行了分页. sql代码: DECLARE @pageindex INT; - ...

  2. sql server中的分页数据查询

    1.引言 今天在工作中遇到一个需要进行sql server分页数据查询的问题,但是分页数据查询的sql却忘记了,最终通过查询资料解决了该问题.现在把解决方法记下,以备查阅. 在这里需要感谢博客园的Ql ...

  3. SQL多表查询中的分页,字段组合综合实例解析

    原文:http://www.jb51.net/article/28753.htm http://xuzhihong1987.blog.163.com/blog/static/2673158720098 ...

  4. 浅谈SQL Server数据库分页

    数据库分页是老生常谈的问题了.如果使用ORM框架,再使用LINQ的话,一个Skip和Take就可以搞定.但是有时由于限制,需要使用存储过程来实现.在SQLServer中使用存储过程实现分页的已经有很多 ...

  5. Oracle中经典分页代码!

    在Oracle中因为没有top关键字,所以在sqlserver中的分页代码并不适用于Oracle,那么在Oracle中如何来实现分页呢? --查询所有数据 STUNO STUNAME STUAGE S ...

  6. Java Web中将oracle的数据库内容以表格形式展现到页面中(分页展示)

    分页SQL语句: ----分页显示 select * from (select rownum as r,t.* from () ; 查询的结果如下: 这个SQL,使用了三层嵌套的查询方式: 1)最内层 ...

  7. (转载)sql语句解决分页问题

    <来源网址:http://www.delphifans.com/infoview/Article_353.html>sql语句解决分页问题日期:2005年1月17日 作者:treemon2 ...

  8. [数据库]Oracle和mysql中的分页总结

    Mysql中的分页 物理分页 •在sql查询时,从数据库只检索分页需要的数据 •通常不同的数据库有着不同的物理分页语句 •mysql物理分页,采用limit关键字 •例如:检索11-20条 selec ...

  9. 使用传入的总记录数实现一条sql语句完成分页查询

    使用传入的总记录数实现一条sql语句完成分页查询     问题:在传统的分页查询的实现中不可避免的需要两条sql语句,一条用于查询数据一条用于查询总记录数.如下面的实际代码所示: Img1 当然如果使 ...

随机推荐

  1. vs2017 xamarin新建单独UWP类库提示不兼容

    One or more projects are incompatible with UAP,Version=v10.0 (win10-arm). One or more projects are i ...

  2. mySql数据库 C#使用guid

    CHAR(36) 如果某列设置为CHAR(36),则MySQL官方的连接器会将其当成 GUID 类型.实际上,有时候 某个字段碰巧设为可CHAR(36), 但是我们的本意并非当它是GUID. varc ...

  3. ABP框架入门踩坑-使用MySQL

    使用MySQL ABP踩坑记录-目录 起因 因为我自用的服务器只是腾讯云1核1G的学生机,不方便装SQL Server,所以转而MySQL. 这里使用的MySQL版本号为 8.0. 解决方案 删除Qi ...

  4. Swagger 导出API

    Swagger 导出API 这算是在博客园的第一篇博客吧,之后发的应该也会同步到博客园上. 此前的博客地址: https://blog.mytyiluo.cn Swagger简介 Swagger是一个 ...

  5. can not connect cube in performancce dashboard

    需要在所有安装sharepoint服务器里面安装ADOMD组件 \Program Files\Microsoft Office Servers\15.0\WebServices\PpsMonitori ...

  6. .net程序中http请求的超时配置

    请求时的超时 // // 摘要: // 获取或设置 System.Net.HttpWebRequest.GetResponse() 和 System.Net.HttpWebRequest.GetReq ...

  7. Java基础学习篇---------String、集合的学习

    一.String常用的方法: 1. == 实质比较两个对象的地址数值 String a = "hello"  (hello为匿名对象) String a1 = "hell ...

  8. BZOJ 1001--[BeiJing2006]狼抓兔子(最短路&对偶图)

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 29035  Solved: 7604 Descript ...

  9. 2018年Android面试题含答案--适合中高级(下)

    这里是我整理出来的面试题,答案我花了很久的时间.加上我自己的理解整理出来的,作者不易,请谅解.有答案的的:https://xiaozhuanlan.com/topic/6132940875   1.A ...

  10. Ubuntu 16.04LTS安装Nginx

    Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 是由 Igor Sysoev ...