更多介绍,可查看我的另外篇文章:SQL Server中row_number函数用法介绍
在实际开发过程中,当数据量比较多的时候,大量的数据一下子展示到页面上是非常不可取的。所以我们通常要进行分页(这里的分页是指真分页),而不是前端JS实现的假分页。
最近的学习过程中,使用ASP.NET MVC配合Layui框架进行开发时,根据Layui Page传回的参数要进行分页操作(虽然EntityFramework提供了非常便捷的分页方法,但是SQL什么时候都不能忘掉吧O(∩_∩)O哈哈~)。索性对于分页SQL这一块,自己做一个系统的总结。
本篇博客针对于SQL Server数据库进行讨论
一、三种分页SQL语句的介绍和写法
示例数据库的字段:
数据库分页是老生常谈的问题了。如果使用ORM框架,再使用LINQ的话,一个Skip和Take就可以搞定。但是有时由于限制,需要使用存储过程来实数据库分页是老生常谈的问题了。如果使用ORM框架,再使用LINQ的话,一个Skip和Take就可以搞定。但是有时由于限制,需要使用存储过程来实现。在SQLServer中使用存储过程实现分页的已经有很多方法了。之前在面试中遇到过这一问题,问如何高效实现数据库分页。刚好上周在业务中也遇到了这个需求,所以在这里简单记录和分享一下。这里以SQLServer的示例数据库NorthWind为例,里面有一张Product表,现在假设我们的需求是要以UnitPrice降
第一种:ROW_NUMBER() OVER()方式
select * from (
select *, ROW_NUMBER() OVER(Order by ArtistId ) AS RowId from ArtistModels
) as b
where RowId between 10 and 20
---where RowId BETWEEN 当前页数-1
一、自定rows(可自命名)字段翻页
select * from (select ROW_NUMBER() over(order by VideoID) rows ,* from TVideo) as v
where v.rows between 3*(3-1)+1 and 3*3
//自定rows为当前行的位置,where后面借展示内容条件,可用between and,也可用>=、<=
二、利用top翻页
select top 3 * from TVideo
where VideoID
这篇博客讲的是SQL server的分页方法,用的SQL server 2012版本。下面都用pageIndex表示页数,pageSize表示一页包含的记录。并且下面涉及到具体例子的,设定查询第2页,每页含10条记录。
首先说一下SQL server的分页与MySQL的分页的不同,mysql的分页直接是用limit (pageIndex-1),pageSize就可以完成,但是SQL se...
select top ((当前页数-1)*每页数据条数) id from 表名
2、再查询所有数据的前几条,但是id不在之前查出来的数据中
select top 每页数据条数 * from 表名 where id not in ( select top ((当前页数-1)*每页数据条数) id from 表名 )
3、查询出
方案二:使用row_number分页
select 查询字段
from (select ROW_NUMBER() over(order by 主键) 别名1 ,查询字段 from 表名)别名2
where 别名1 between X and Y
方案一:使用top分页
declare @P
插入语句常用写法:
INSERT INTO items(name,city,price,number,picture) VALUES('耐克运动鞋','广州',500,1000,'003.jpg');
这种方式只能够一次插入一条数据,要想插入多条数据,就得多次调用此sql语句,意味着多次与数据库建立连接。但是这样一来,就会增加服务器的负荷,因为,执行每一次SQL服务器都要同样对SQL进行分析、优化等操作。幸好MySQL提供了另一种解决方案,就是使用一条INSERT语句来插入多条记录。这并不是标准的SQ
ORDER BY column_name
OFFSET (page_number - 1) * page_size ROWS
FETCH NEXT page_size ROWS ONLY;
其中,your_table 是要查询的表名,column_name 是要排序的列名,page_number 是要查询的页码,page_size 是每页要显示的记录数。