SQL Server两种分页的存储过程使用介绍

由于现在很多的企业招聘的笔试都会让来招聘的写一个分页的存储过程,有的企业甚至要求应聘者用两种方式实现分页,如果没有在实际项目中使用过分页,那么很多的应聘者都会出现一定的问题,下面介绍两种分页的方法。

一、 以学生表为例,在数据库中有一个Student表,字段有StudentNo, ,LoginPwd, StudentName,Sex,ClassId,Phone,Address,BornDate,Email,isDel

要求:查询学生的信息,每页显示5条记录

二、第一种方式分页:利用子查询 not in

例如:

第一页

select top 5 * from Student

第二页: 查询前10条中不在前5条的记录,那么就是6-10,也就是第二页

select top 5 * from Student where StudentNo not in(select top 10 Studentno from Student)

同理可以得到第三页、、、、、、、

这种方式相信大家都能明白,这种分页的存储过程写法就不多做介绍,重点介绍下面那种分页方法。

三、第二种方式分页:利用ROW_NUMBER()这个自带的函数

因为自05之后,提供一个专门用于分页的函数,那就是ROW_NUMBER()这个函数,分页的基本语法:ROW_NUMBER() over(排序字段):可以根据指定的字段排序,对排序之后的结果集的每一行添加一个不间断的行号,相当于连续的id值一样,

例如sql语句:select ROW_NUMBER() over(order by studentno) id, * from Student 那么结果集可以看到:

那么我们可以看到id值是连续的,所有接下来的存储过程写起来就比较简单了。

注意:我们必须为这个结果集命一个新名字,比如我们命名为temp,那么分页存储过程可以写出:

if exists( select * from sysobjects where name='usp_getPageData') drop proc usp_getPageData --如果存在名字为usp_getPageData的存储过程则删除 go create proc usp_getPageData --创建名字usp_getPageData存储过程 @toPage int=0 output, --总页数 @pageIndex int =1 , --默认显示第一页 @pageCount int =5 --默认每页的记录为5条 as select temp.StudentNo,temp.LoginPwd,temp.StudentName,temp.Sex,temp.ClassId,temp.Phone,temp.Address,temp.BornDate,temp.Email,temp.isDel from (select ROW_NUMBER() over (Order by studentno) id,* from Student) temp where id>(@pageIndex-1)*@pageCount and id<=@pageIndex*@pageCount set @toPage=ceiling((select COUNT(*) from Student)*1.0/@pageCount) --使用ceiling函数算出总页数 go

说明因为在实际的项目的开发中,经常要显示总页数给用户看的,所有这里的存储过程增加了一个toPage参数,由于它是要输出给用户看的,所有参数类型定义为output,并用set进行赋值。

以上是对两种分页方法的介绍,如果有任何疑问或不懂的可以留言给我。

时间: 2024-09-20 05:33:28

SQL Server两种分页的存储过程使用介绍的相关文章

SQL Server两种分页的存储过程使用介绍_MsSql

由于现在很多的企业招聘的笔试都会让来招聘的写一个分页的存储过程,有的企业甚至要求应聘者用两种方式实现分页,如果没有在实际项目中使用过分页,那么很多的应聘者都会出现一定的问题,下面介绍两种分页的方法. 一. 以学生表为例,在数据库中有一个Student表,字段有StudentNo, ,LoginPwd, StudentName,Sex,ClassId,Phone,Address,BornDate,Email,isDel 要求:查询学生的信息,每页显示5条记录 二.第一种方式分页:利用子查询 not

SQL server两种修改对象所有者的方法,

server|对象 一般开发,SQL Server的数据库所有者为dbo.但是为了安全,有时候可能把它换成其它的名称. 所有者变换不是很方便.这里列出两种供参考 一: ---******************更改权限以添加HHRC用户*************************--step1 添加第三方用户,如"chn"--step2 运行sql,加对象权限移至第三方用户--step3 添加hhrc用户--step4 运行sql,将对象权限移至hhrc用户declare @tb

MS SQL Server 2000 中文模糊搜寻存储过程及函数

server|存储过程|函数|中文 这些存储过程/函数可以在 MS SQL Server 2000 里使用,包含两组存储过程, 这两组函数的功能相同, 只是适用的汉字内码范围不同.这些存储过程及函数支持 GBK (大陆简体中文及繁体中文) 和 BIG5 内码 (台湾及香港等的繁体中文)这些函数将直接用在 SQL 语句里, 使用非常方便.可以按照含有读音相近的文字进行查找, 可以处理多音字, 可以查找含有某个相近读音的字的记录, 在查找姓名时特别有用.这些存储过程全部用 C++ Builder 编

c#中两种不同的存储过程调用与比较_实用技巧

存储过程的调用在B/S系统中用的很多.传统的调用方法不仅速度慢,而且代码会随着存储过程的增多不断膨胀,难以维护.新的方法在一定程度上解决了这些问题. 在使用.NET的过程中,数据库访问是一个很重要的部分,特别是在B/S系统的构建过程中,数据库操作几乎成为了一个必不可少的操作.调用存储过程实现数据库操作使很多程序员使用的方法,而且大多数的程序员都是能使用存储过程就使用存储过程,很少直接使用SQL语句,所以存储过程是很有用而且很重要的. 存储过程简介 简单的说,存储过程是由一些SQL语句和控制语句组

SQL Server使用row_number分页的实现方法_MsSql

本文为大家分享了SQL Server使用row_number分页的实现方法,供大家参考,具体内容如下 1.首先是 select ROW_NUMBER() over(order by id asc) as 'rowNumber', * from table1 生成带序号的集合 2.再查询该集合的 第 1  到第 5条数据 select * from (select ROW_NUMBER() over(order by id asc) as 'rowNumber', * from table1) a

SQL Server使用row_number分页的实现方法

本文为大家分享了SQL Server使用row_number分页的实现方法,供大家参考,具体内容如下 1.首先是 select ROW_NUMBER() over(order by id asc) as 'rowNumber', * from table1 生成带序号的集合 2.再查询该集合的 第 1  到第 5条数据 select * from (select ROW_NUMBER() over(order by id asc) as 'rowNumber', * from table1) a

浅析SQL SERVER一个没有公开的存储过程

server|存储过程 浅析SQL SERVER一个没有公开的存储过程    从SQLSERVER6.5开始,MS提供了一个非常有用的系统存储过程sp_MSforeachtable和sp_MSforeachDB;作为DBA会经常需要检查所有的数据库或用户表,比如:检查所有数据库的容量;看看指定数据库所有用户表的容量,所有表的记录数...,我们一般处理这样的问题都是用游标分别处理处理,比如:在数据库检索效率非常慢时,我们想检查数据库所有的用户表,我们就必须这样写游标:DECLARE @TableN

动态创建SQL Server数据库、表、存储过程

server|创建|存储过程|动态|数据|数据库 下面是利用SQL语句创建数据库.表.存储过程.视图.索引.规则.修改表.查看数据等的方法.所要增加的控件如下: Imports System.DataImports System.Data.SqlClient Public Class Form1  Inherits System.Windows.Forms.Form  Private ConnectionString As String = "Data Source=.;Initial Cata

在SQL Server启动时自动执行存储过程。第1/2页_MsSql

sql Server提供了系统存储过程sp_procoption,这个存储过程可以用于当SQL Server服务启动时指派一个或者多个存储过程自动执行.这是一个很不错的选择,它可以用于多种多样的用途.比如,你可能在你的数据库中有开销很大的查询,这个查询在首次执行时会花费一些时间.通过使用sp_procoption,你可以在服务器启动时运行这个查询以此来预先编译执行计划,由此,你的某个用户就不会成为第一个运行这个特殊查询的不幸的人.我曾经用这个功能建立了一个我自己写的概要分析器服务器端跟踪的自动执