本文为大家分享了SQL Server使用row_number分页的实现方法,供大家参考,具体内容如下
1、首先是
select ROW_NUMBER() over(order by id asc) as 'rowNumber', * from table1
生成带序号的集合
2、再查询该集合的 第 1 到第 5条数据
1
2
3
|
select * from
( select ROW_NUMBER() over( order by id asc ) as 'rowNumber' , * from table1) as temp
where rowNumber between 1 and 5
|
完整的Sql语句
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
declare @pagesize int ; declare @pageindex int ; set @pagesize = 3
set @pageindex = 1; --第一页
select * from ( select ROW_NUMBER() over( order by id asc ) as 'rowNumber' , * from table1) as temp where rowNumber between (((@pageindex-1)*@pagesize)+1) and (@pageindex*@pagesize)
set @pageindex = 2; --第二页
select * from ( select ROW_NUMBER() over( order by id asc ) as 'rowNumber' , * from table1) as temp where rowNumber between (((@pageindex-1)*@pagesize)+1) and (@pageindex*@pagesize)
set @pageindex = 3; --第三页
select * from ( select ROW_NUMBER() over( order by id asc ) as 'rowNumber' , * from table1) as temp where rowNumber between (((@pageindex-1)*@pagesize)+1) and (@pageindex*@pagesize)
set @pageindex = 4; --第四页
select * from ( select ROW_NUMBER() over( order by id asc ) as 'rowNumber' , * from table1) as temp where rowNumber between (((@pageindex-1)*@pagesize)+1) and (@pageindex*@pagesize)
|
下面我们来写个存储过程分页
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
Alter Procedure PagePager
@TableName varchar (80),
@File varchar (1000), ---
@ Where varchar (500), ---带and连接
@OrderFile varchar (100), -- 排序字段
@OrderType varchar (10), --asc:顺序,desc:倒序
@PageSize varchar (10), --
@PageIndex varchar (10) --
as if( ISNULL (@OrderFile, '' ) = '' )
begin set @OrderFile = 'ID' ;
end
if( ISNULL (@OrderType, '' ) = '' )
begin set @OrderType = 'asc'
end
if( ISNULL (@File, '' ) = '' )
begin set @File = '*'
end declare @ select varchar (8000)
set @ select = ' select ' + @File + ' from ( select *,ROW_NUMBER() over(order by ' + @OrderFile + ' ' + @OrderType + ') as ' 'rowNumber' ' from ' + @TableName + ' where 1=1 ' + @ Where + ' ) temp where rowNumber between (((' + @PageIndex + ' - 1) * ' + @PageSize + ')+1) and (' + @PageIndex + '*' + @PageSize+ ')'
exec (@ select )
|
以上就是本文的全部内容,希望对大家学习row_number分页有所帮助。