【www.gdgbn.com--Mssql】

简单实用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语句

 

本文来源:http://www.gdgbn.com/shujuku/28662/