网上有很多人在写分页的sql,评论里面经常有人说,这个分页不好,那个过时了,我觉得这些好与不好,过时与不过时都需要根据具体情境来判断。今天我闲来无事写了一个使用top分页,数据只有1000条,虽然说明不了很多问题,但是作为自己学习的一个记录吧。

表结构如下:

USE [MyDB]
GO/****** Object:  Table [dbo].[MyTable]    Script Date: 03/01/2015 21:18:51 ******/
SET ANSI_NULLS ON
GOSET QUOTED_IDENTIFIER ON
GOCREATE TABLE [dbo].[MyTable]([Id] [int] NOT NULL,[Info1] [nvarchar](50) NULL,[Info2] [nvarchar](50) NULL,[Info3] [nvarchar](50) NULL,CONSTRAINT [PK_MyTable] PRIMARY KEY CLUSTERED
([Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]GO

先针对这张表写了分页语句:

--page index
declare @index int;
--row count
declare @count int;
--sql
declare @sql nvarchar(max);set @index = 2;
set @count = 10;
set @sql = 'select top ' + CONVERT(nvarchar(20),@count) + ' * from MyTable where Id not in'+
'(select top '+ CONVERT(nvarchar(20),@count*(@index-1)) +' id from MyTable order by Id)'+
'order by Id';print @sql;
exec(@sql);

得出的数据如下:

这时候把这个分页语句抽提成存储

-- =============================================
-- Author:      <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE prc_divpage2@table  nvarchar(50),@fields nvarchar(50),@wheres nvarchar(50),@orders nvarchar(50),@index  int,@count  int
AS
BEGIN--sqldeclare @sql nvarchar(max);set @sql = 'select top ' + CONVERT(nvarchar(20),@count) +' '+ @fields +' from '+ @table +' where Id not in'+'(select top '+ CONVERT(nvarchar(20),@count*(@index-1)) +' id from ' + @table +' where '+ @wheres +' order by '+ @orders +')'+'order by '+ @orders;print @sql; exec(@sql);
END
GO

测试下:

总结:

这个使用top分页的存储过程可以指定表明,字段名,查询条件,排序字段等等,比较通用,但表中必须要有Id字段,而且只能做单表的分页,这个有待改进。

使用top做sql分页相关推荐

  1. Sql分页查询以及top函数简单实例

    Sql分页查询以及top函数简单实例 Sql分页查询以及top函数简单实例 我们做项目时查询表格存在几百上千条数据时经常会需要用到分页,下面就给大家介绍一下在sql中查询分页的简单实例吧.首先我们要知 ...

  2. SQL分页的三种方法

    三种SQL分页法 表中主键必须为标识列,[ID] int IDENTITY (1,1) 1.分页方案一:(利用Not In和SELECT TOP分页) 语句形式: SELECT TOP 10 * FR ...

  3. 网络工作室暑假后第三次培训资料(几种SQL分页的总结)整理

    在实际开发的过程中如果记录数非常的庞大,如果直接用SQL语句查询并填充到DataTable中,将是一件非常恐怖的事情.而且对网站性能,服务器性能消耗很大. 两个常犯的错误: 1)在现实数据时,查询时会 ...

  4. 完整SQL分页存储过程(支持多表联接)

    Code /*********************************************************   * 作    用:数据分页(完整SQL分页存储过程(支持多表联接)) ...

  5. 常用3种数据库的Sql分页

    在程序的开发过程中,处理分页是大家接触比较频繁的事件,因为现在软件基本上都是与数据库进行挂钓的.但效率又是我们所追求的,如果是像原来那样把所有满足条件的记录全部都选择出来,再去进行分页处理,那么就会多 ...

  6. SQL 分页查询语句大全即(查找第N到M条记录的方法)

    SQL 分页查询语句大全即(查找第N到M条记录的方法) 第一种方法,我的原创方法 row=2 表示分页行数 page=1 表示页码 getnum=row*page select * from  (se ...

  7. SQL分页查询方案的性能对比

    作者 | 中国农业银行 吴海存 责编 | 晋兆雨 头图 | CSDN下载自视觉中国 导读 本文主要介绍了基于ROWNUM.主键列/非空唯一性列.分析函数.OFFSET-FETCH NEXT机制的几种S ...

  8. SQL分页查询的介绍以及好处~~

    SQL分页查询的介绍以及好处~~ 分页查询 就是将过多的结果在有限的界面上分多页来显示,一般将分页查询分为两类: 逻辑分页.物理分页. 逻辑分页是在用户第一次访问时,将数据库的所有记录全部查询出来,添 ...

  9. Java 手写一个SQL分页

    Java手写一个类似PageHelper的分页SQL 目前分页插件众所周知的莫过于和mybatis完美融合的PageHelper了,简单两行代码就实现了sql分页,配合PageInfo类,将数据总数量 ...

最新文章

  1. 线性矩阵不等式LMI的运用与Lipschitz非线性系统观测器的设计
  2. 一位编程15年的大佬:我的OpenCV开发高手成长之路
  3. 102 二叉树层序遍历
  4. Python运算符优先级
  5. 并发编程(原子性、可见性、一致性)
  6. 屏幕录像软件Bandicam和oCam
  7. IEEE ISO/IEC简介
  8. C++之父访谈录:我也没想到 C ++ 会这么成功!
  9. 色彩专题——蓝色(blue)_8号招牌档
  10. warning: initialization from incompatible pointer type error, forbidden解决
  11. 基于matlab的FFT滤波,可以实现对simulink模型中示波器的波形数据或者外部mat数据、csv数据进行谐波分析(FFT)和自定义频段清除
  12. navicat下载安装
  13. hp DV4 声卡驱动 IDT声卡补丁1.1
  14. Android中一个有趣的crash的日志分析
  15. python编程就业_python编程语言就业做什么工作的?python就业方向
  16. 使用Glide制作圆形图片
  17. pip20恢复官方源出现bug:confirming the ssl certificate: HTTPSConnectionPool(host=‘pypi.org‘, port=443)
  18. html5以图片为背景的代码,HTML5画布背景图片
  19. 机器学习背后的数学:范数与赋范空间
  20. Flutter-防京东商城项目-创建商品数据模型 、请求Api接口渲染热门商品 推荐商品 获取数据然后模型赋值-06

热门文章

  1. 计算机毕业设计(附源码)python学校健身房管理系统
  2. redis ZSet实现排行榜功能
  3. iMeta 微生物组生物信息高起点期刊创刊会暨学术研讨会(8月25日下午1:30)
  4. oracle3个重要角色,Oracle 用户及角色 介绍
  5. 远程连接mysql 提示 Access denied for user ‘root‘@‘192.168.1.148‘ (using password: YES)我的小问题
  6. listview连接mysql_ListView 数据库 C
  7. Python中函数内如何调用另一个函数返回值
  8. 分享 | 运营必备11大数据分析模型,建议收藏
  9. 怎样编写java会员卡号_会员卡设计java
  10. Python项目打包部署Linux服务上