存储过程实现分页的程序

 方法一:
******************************************************

declare
@sqlstr nvarchar(4000), --查询字符串
         @pagecount int,        --第N页
 @pagesize int ,       --每页行
         @rowcount int
        select @pagecount=3,@pagesize=100
        set @sqlstr='select * from sysobjects'
set nocount on
declare @P1 int--P1是游标的id
exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount OUTPUT
        select @rowcount as 总行数,ceiling(1.0*@rowcount/@pagesize) as 页数,@pagecount as 当前页
        set @pagecount=(@pagecount-1)*@pagesize+1
        exec sp_cursorfetch @P1,16,@pagecount,@pagesize
exec sp_cursorclose @P1


方法2
*************************************************

--在Sql查询分析器中执行一下脚本建立存储过程p_splitpage
create procedure p_splitpage  
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_splitpage]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_splitpage]
GO

--利用SQL未公开的存储过程实现分页
create procedure p_splitpage  
@sql nvarchar(4000), --要执行的sql语句
@currentpage int=2,  --要显示的页码
@pagesize int=10,  --每页的大小
@pagecount int=0 out --总页数
as
set nocount on
declare @p1 int

exec sp_cursoropen @p1 output,@sql,@scrollopt=1,@ccopt=1,@rowcount=@pagecount output

select @pagecount=ceiling(1.0*@pagecount/@pagesize)
 ,@currentpage=(@currentpage-1)*@pagesize+1
select @currentpage
exec sp_cursorfetch @p1,16,@currentpage,@pagesize
exec sp_cursorclose @p1
go

--然后在程序中就可以用以下方式调用,具体的参数请参见上面的脚本
exec p_splitpage 'select top 1000 id,name from sysobjects',2


方法3
***********************************************


CREATE proc page
@pagenum int
as
SET NOCOUNT ON /*-----这一句很重要哦:)),不然它只会认 insert #change......这个数据集:))*/
declare @sql nvarchar(500) --声明动态sql执行语句
declare @pagecount int --当前页数

--取得当前数据库的记录总数
declare @row_num int
begin
select @row_num=count(*) from cat_list

--创建临时表,作为数据过滤
create table #change (T_id int)

--判断当前页数
if @row_num>6 --大于页面显示记录数,则分页
begin
set @row_num=@pagenum*6

if @row_num=6
select top 6 * from cat_list
else
begin
set @row_num=(@pagenum-1)*6
set @pagecount=@row_num
set @sql=N'insert #change (T_id) select top '+cast(@pagecount as char(100))+' T_id from cat_list where T_id not in (select T_id from #change)'
exec sp_executesql @sql
select top 6 * from cat_list where T_id not in (select T_id from #change)
end
end
else --只现实全部的数据
select * from cat_list
end
GO


客户端这样调用:


<% dim T_com
dim T_rs'declare datamanage recordset


dim parameters
set T_com=server.createobject("adodb.command")
T_com.ActiveConnection=conn
T_com.CommandText="page"
T_com.CommandType=adCmdStoredProc
'T_com.Prepared=true
set parameters=T_com.CreateParameter("@pagenum",adInteger,adParamInput)
T_com.Parameters.Append parameters
dim page
page=request.QueryString("page")
if page="" then
page=1
end if
T_com("@pagenum")=page
set T_rs=T_com.Execute

do while not T_rs.eof
response.Write T_rs("c_name")
T_rs.movenext
loop
%>
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值