SQL分页存储过程

本文介绍了一种使用SQL Server 2005中的ROW_NUMBER()函数进行分页查询的方法,并详细解释了存储过程PAGETEST的具体实现细节。该方法能够根据输入的页码和每页显示的记录数返回相应的内容。

CREATE PROC [dbo].[PAGETEST]
@pagesize int,         --每页显示记录数
@currentpage int,      --当前页
@datastatus int,
@IsValid int,
@rowcount int output, --总记录数
@pagecount int output --总页数
AS
select
@rowcount=COUNT(*)
from dbo.Task
where DataStatus=@datastatus and IsValid=@IsValid

if @rowcount%@pagesize>0
set @pagecount=(@rowcount/@pagesize)+1
else set @pagecount=@rowcount/@pagesize

BEGIN
select * 
from
(
select
ROWNUM=ROW_NUMBER() OVER (ORDER BY ID),
ID,
Subject,
Status,
IsValid
from dbo.CPF_Task
where DataStatus=@datastatus
 and (@IsValid is null or @IsValid =-1 or @IsValid =IsValid) 
)
as T
where T.ROWNUM BETWEEN (@currentpage*@pagesize+1)AND(@currentpage*@pagesize+@pagesize)
 END

 

说明:总页数和总记录数是需要输出的参数,在声明时要加上output。ROW_NUMBER()函数是SQL2005中新增的一个函数,它通常被用在分页的SQL语句中。可以理解为函数可以为表中的某个字段建立从1开始的序列。或者这样理解,这个函数根据给定的字段建立了一个新的,从1开始的数据列。from 后面的语句是将括号中select 查到的数据集暂时命名为T,然后根据这个数据集的新列和传入的当前页索引和页码大小的运算取到当前页面应该显示的记录集合。 这里还要注意括号中where条件的写法,DataStatus=@datastatus  and (@IsValid is null or @IsValid =-1 or @IsValid =IsValid) 。当存储过程中有条件查询时,例如要以主题、状态、时间、作者来查询记录时,四个条件可以自由组合查询,此时可采用(@condition is null or @condition is "" or @condition =condition)and (...)的方式来实现。

转载于:https://www.cnblogs.com/xuezhi/archive/2012/11/22/2782869.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值