sql分页查询代码
表结构:
create table page(
id int identity(1, 1) primary key,
filed1 varchar(11) not null,
filed2 varchar(11) not null
)
第一种方法,不过对表有要求:表必须有主键(下面语句展示是查询1000到10500条数据)
1)
复制代码 代码示例:
select top 500 * from page
where id not in
(
select top 10000 id
from page
order by id
) order by id
2)
复制代码 代码示例:
select top 500 * from page
where id>
(
select max(id)
from
(
select top 10000 id
from page
order by id
) a
) order by id
第二种方法,这个生oracle中的方法类似,利用了函数row_number()
复制代码 代码示例:
select * from
(
select ROW_NUMBER() over(order by id desc) rownum, *
from page
) a
where rownum>10000 and rownum<10501
第三种方法,利用游标存储过程分页
复制代码 代码示例:
create procedure paging
@sqlstr nvarchar(4000), --查询字符串
@currentpage int, --第N页
@pagesize int --每页行数
as
set nocount on
declare
@P1 int,
@rowcount int
exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,
@rowcount=@rowcount output
select ceiling(1.0*@rowcount/@pagesize) as 总页数
set @currentpage=(@currentpage-1)*@pagesize+1
exec sp_cursorfetch @P1,16,@currentpage,@pagesize
exec sp_cursorclose @P1
set nocount off
exec SqlPage N'select * from page', 21, 500
第二种方法的效率最佳,其次为第一种方法,第三种方法次之。