经常用到的一个分页存储过程

 .net分页调用时与AspNetPager结合很好用的。
 1CREATE   procedure Common_PageList(
 2@select_list varchar(1000)='*',--不需要select
 3@table_name varchar(1000),
 4@where varchar(1000)='',--不需要where
 5@primary_key varchar(100),--当是表联合时,加表名前缀.
 6@order_by varchar(200),--需要完整的子句
 7@page_size smallint=20,--每页记录
 8@page_index int=1,--页索引
 9@bl_page int=1)--0 取所有记录集
10as
11
12
13declare @sql_str varchar(8000)
14declare @record_min int
15declare @new_where varchar(1000),@newin_where varchar(1000)
16if @where=''--重新为梳理,此过程时性能的考虑,因此不使用 where 1=1 再追加条件。
17begin
18   select @new_where=''
19   select @newin_where=''
20end
21else
22begin
23   select @new_where=' and '+@where
24   select @newin_where=' where '+@where
25end
26
27if @order_by!=''
28begin
29   select @order_by=' order by '+@order_by
30end
31
32if @bl_page=0
33   select @sql_str='select   '+@select_list +'  from '+@table_name+' '+@newin_where+' '+@order_by
34else
35  if @page_index=1
36      if @where=''
37          select @sql_str='select  top '+convert(varchar,@page_size)+ ' '+@select_list+' from '+@table_name+' '+@order_by
38      else
39          select @sql_str='select  top '+convert(varchar,@page_size)+ ' '+@select_list+' from '+@table_name+' where '+@where+' '+@order_by
40  else
41  begin
42      select @record_min=(@page_index-1)*@page_size
43      select @sql_str='select  top '+convert(varchar,@page_size)+' '+@select_list+' from '+@table_name+' where '+@primary_key+' not in  '
44      select @sql_str=@sql_str+' (select  top '+convert(varchar,@record_min)+' '+@primary_key+' from '+@table_name+@newin_where+' '+@order_by+')'
45      select @sql_str=@sql_str+@new_where+' '+@order_by
46  end
47print @sql_str
48exec(@sql_str)
49
50
51select @sql_str='select 1  from ' +@table_name+' '+@newin_where
52exec(@sql_str)
53
54return @@rowcount
55
56
57
posted @ 2008-07-02 09:33  逍遥网外  阅读(329)  评论(0编辑  收藏  举报