数据分页显示

--存储过程分页

create proc proc_PagerJob
@pageNum varchar(3),--当前页码
@pageSize varchar(3),--每页显示行数
@pageKey varchar(20),--主键
@where varchar(500),--where条件
@orderList varchar(50),--排序列名
@orderdy varchar(4),--排序方法
@pageCount varchar(6) output,--总页数
@pageNums varchar(6) output--总记录数
as
declare @str varchar(4000)--sql语句
declare @sstr nvarchar(4000)--记录总条数sql语句
declare @Fwhere varchar(500)--前置where条件
declare @Lwhere varchar(500)--后置where条件
declare @SorderList varchar(50)--排序列
declare @rn float--系统函数返回总行数
if(@where<>'')
begin
set @Fwhere=' where '+@where
set @Lwhere=' and  '+@where
end
else
begin
set @Fwhere=' '
set @Lwhere=' '
end
if(@orderList<>' ')
begin
set @sorderList=' orderby '+@orderList+' '+@orderdy
end
else
begin
set @sorderList=' '
end
set @str=@str+@Fwhere+@sorderList+')'+@Lwhere+@sorderList
exec(@str)
set @sstr='select @rn=count(*) from view_job '+@Fwhere
execute sp_executesql @sstr,N'@rn float out',@rn out
set @pageNums = convert(varchar,@rn)
set @pageCount=convert(varchar,ceiling(@rn/convert(float,@pageSize)))

 

 

 

--oracle分页
--第一步
select m.*, ROWNUM rn from ((select * from prescription) m)

select * from (
       select m.*, ROWNUM rn from ((select * from prescription order by id) m)
) where rn between 1 and 5


--oracle分页2 "通用写法" 在sqlserver中用top

--pageNum 或 pageNo 当前第几页 ,pageSize每页显示的函数,
select * from prescription where rownum <=pageSize and id not in(
       select id from prescription where rownum <=(pageNum-1)*pageSize
)

--sqlserver写法
select top pageSize  * from tb_word where id not in(
 select top ((pageNum-1)*pageSize) id from tb_word order by id 
) order by id


select top 2  * from tb_word where id not in(
 select top ((2-1)*2) id from tb_word order by id 
) order by id

 

--id如果不是主键,需要加order by id
select * from prescription where rownum <=3 and id not in(
       select id from prescription where rownum <=(2-1)*3
)

--oracle分页3 三个select语句嵌套式实现分页显示 ,效率比第一种好

 

posted @ 2011-12-09 14:26  灬殇丶夜灬  阅读(173)  评论(0)    收藏  举报