简单实用asp教程.net mssql万能分页程序
一、比较万能的分页:
sql代码:
view sourceprint?1 select top 每页显示的记录数 * from topic where id not in
2 (select top (当前的页数-1)×每页显示的记录数 id from topic order by id desc)
3 order by id desc
需要注意的是在access中不能是top 0,所以如果数据只有一页的话就得做判断了。。
二、sql2005中的分页代码:
sql代码:
view sourceprint?1 --讲查询出来的结果集作为一张临时表
2 with temptable as (
3 select row_number() over (order by id desc) as rownum, * from tablename
4 )
5 --从临时表中取得指定行号区间的行
6 select * from temptable where rownum between @startindex and @endindex
注:row_number() over (order by id desc)为sql2005新增函数,表示取出每一列的行号
三、分页存储过程sql代码:
sql代码:
view sourceprint?01 set ansi_nulls on
02 go
03 set quoted_identifier on
04 go
05 -- =============================================
06 -- author: 牛腩
07 -- create date: 2009-07-22 12:41
08 -- description: 分页,用到了row_number()
09 -- =============================================
10 alter procedure [dbo].[proc_showpage]
11 @tblname varchar(255), -- 表名
12 @strgetfields varchar(1000) = '*', -- 需要返回的列,默认*
13 @strorder varchar(255)='', -- 排序的字段名,必填
14 @strordertype varchar(10)='asc', -- 排序的方式,默认asc
15 @pagesize int = 10, -- 页尺寸,默认10
16 @pageindex int = 1, -- 页码,默认1
17 @strwhere varchar(1500) = '' -- 查询条件 (注意: 不要加 where)
18 as
19
20 declare @strsql varchar(5000)
21
22 if @strwhere !=''
23 set @strwhere=' where '+@strwhere
24
25 set @strsql=
26 'select * from ('+
27 'select row_number() over (order by '+@strorder+' '+@strordertype+') as pos,'+@strgetfields+' '+
28 'from ['+@tblname+'] '+@strwhere+
29 ') as sp where pos between '+str((@pageindex-1)*@pagesize+1)+' and '+str(@pageindex*@pagesize)
30
31 exec (@strsql)
32 print @strsql -- 测试用,可在查询的时候看到生成的sql语句