首页 > 数据库 >SqlServer 分页查询

SqlServer 分页查询

时间:2023-02-17 09:44:37浏览次数:34  
标签:table1 分页 -- 当前页 SqlServer 查询 location id

转载于 https://www.bbsmax.com/A/ZOJPDNQ2Jv/

 

第一种方法:效率最高

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)

 

存储过程 (表名aa)

if(exists(select* from sys.procedures where name='p_location_paging'))--如果p_location_paging这个存储过
drop proc p_location_paging  --那么就删除这个存储过程
go
create proc p_location_paging(@pageSize int, @currentPage int)--创建存储过程,定义两个变量'每页显示的条数'和'当前页'
as
select  top (@pageSize) * from (
  select ROW_NUMBER() over(order by locid) as rowid ,* from  aa
)as A where rowid> (@pageSize)*((@currentPage)-1)

 

 

第二种方法:效率次之

SELECT TOP 页大小 *  --如果每页显示10条数据,那么这里就是查询10条数据
FROM table1
WHERE id >  --假如当前页为第三页,那么就需要查询21-30条数据,即:id>20
        (
            SELECT ISNULL(MAX(id),0)  --查询子查询中最大的id
            FROM
                (
                    SELECT TOP 页大小*(当前页-1) id FROM table1 ORDER BY id
--因为当前页是第三页,每页显示十条数据。那么我将: 页大小*(当前页-1),就是获取到了在"当前页""前面"的20条数据。
--所以上面用max(id)查询最大的id,取到这个20,那么前面的where 条件的id>20 即取到了第三页的数据,即取21-30条数据 ) as A ) ORDER BY id

 

存储过程(表名 aa)
if(exists(select * from sys.procedures where name='p_location_paging'))
 
drop proc p_location_paging
 
go
 
create proc p_location_paging(@pageSize int ,@currentPage int)
 
as
 
select  top (@pageSize) * from aa
 
where locId>(select ISNULL(MAX(locId),0)
 
from (select top ((@pageSize)*(@currentPage-1))locid from location  order by locId) as a
 
)order by locId

第三种方法:效果最差

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

 

标签:table1,分页,--,当前页,SqlServer,查询,location,id
From: https://www.cnblogs.com/kelenote/p/17129055.html

相关文章

  • 关于 EF Core 使用 SplitQuery 后由于不稳定排序字段对子表查询结果的影响
    引子假设在博客系统中的表设计为:classDiagramclassBlog{+StringId+StringName+DateTimeCreateTime+intOrder+List<Post>......
  • 使用 html2Canvas 与 JsPDF 生成海报和pdf文件下载等业务,解决pdf分页样式问题
    需求场景吧页面元素内容转成图片,生成一个海报保存或者上传服务器当前元素内容生成一个pdf文件完成下载到客户端,并且上传到服务器1.开发前的准备//元素转图片npm......
  • redis的慢查询分析
    ########################### redis.conf配置文件的慢查询配置如下:##################################SLOWLOG####################################指定执行时......
  • sqlserver 行转列 列转行
    行列互转,是一个经常遇到的需求。实现的方法,有casewhen方式和2005之后的内置pivot和unpivot方法来实现。在读了技术内幕那一节后,虽说这些解决方案早就用过了,却没有系统性......
  • Specifications动态查询
    【前言说明】针对CRUD种的查询,因为我们的查询总是具有各种各样的筛选条件为了我们的程序能够更加适应筛选条件的变化,SpringDataJpa提供了Specifications这种解决方案 ......
  • JPA使用Specification构建动态查询
    封装Specification查询条件,在SpringDataJPA2.0以前使用Specifications这个辅助类来操作where、not、and和or连接,在2.0版本以后这个类会被剔除,可以直接使用Specificat......
  • sql 查询表数据
    SELECTs.NameASSchemaName,t.NameASTableName,p.rowsASRowCounts--,--CAST(ROUND((SUM(a.used_pages)/128.00),2)ASNUMERIC(36,2))ASUsed_MB,--CAST(R......
  • SQLSERVER 临时表和表变量到底有什么区别?
    一:背景1.讲故事今天和大家聊一套面试中经常被问到的高频题,对,就是临时表和表变量这俩玩意,如果有朋友在面试中回答的不好,可以尝试看下这篇能不能帮你成功迈过。二:到......
  • php7.3.4 pdo方式连接sqlserver 设置方法
    我这边用的php是7.3.4版本的,大家设置的时候看一下。一、首先要开启php的sqlsrv扩展1.下载SQLSRV58.EXE,我的php版本是7.3.4https://docs.microsoft.com/en-us/sql/conne......
  • 处理C#连接SQLServer总是连接不上
    主要是三种情况:1、sqlcommand执行超时;2、sqlconnection执行超时;3、数据库掉线TCP连接不上,针对第三种情况代码如下:staticvoidQuickOpen(thisSqlConnectionconn,in......