经常用到的一个分页存储过程
.net分页调用时与AspNetPager结合很好用的。
1
CREATE 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 取所有记录集
10
as
11
12
13
declare @sql_str varchar(8000)
14
declare @record_min int
15
declare @new_where varchar(1000),@newin_where varchar(1000)
16
if @where=''--重新为梳理,此过程时性能的考虑,因此不使用 where 1=1 再追加条件。
17
begin
18
select @new_where=''
19
select @newin_where=''
20
end
21
else
22
begin
23
select @new_where=' and '+@where
24
select @newin_where=' where '+@where
25
end
26
27
if @order_by!=''
28
begin
29
select @order_by=' order by '+@order_by
30
end
31
32
if @bl_page=0
33
select @sql_str='select '+@select_list +' from '+@table_name+' '+@newin_where+' '+@order_by
34
else
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
47
print @sql_str
48
exec(@sql_str)
49
50
51
select @sql_str='select 1 from ' +@table_name+' '+@newin_where
52
exec(@sql_str)
53
54
return @@rowcount
55
56
57
CREATE procedure Common_PageList(2
@select_list varchar(1000)='*',--不需要select3
@table_name varchar(1000),4
@where varchar(1000)='',--不需要where5
@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 取所有记录集10
as11

12

13
declare @sql_str varchar(8000)14
declare @record_min int15
declare @new_where varchar(1000),@newin_where varchar(1000)16
if @where=''--重新为梳理,此过程时性能的考虑,因此不使用 where 1=1 再追加条件。17
begin18
select @new_where=''19
select @newin_where=''20
end21
else22
begin23
select @new_where=' and '+@where24
select @newin_where=' where '+@where25
end26

27
if @order_by!=''28
begin29
select @order_by=' order by '+@order_by30
end31

32
if @bl_page=033
select @sql_str='select '+@select_list +' from '+@table_name+' '+@newin_where+' '+@order_by34
else35
if @page_index=136
if @where=''37
select @sql_str='select top '+convert(varchar,@page_size)+ ' '+@select_list+' from '+@table_name+' '+@order_by38
else39
select @sql_str='select top '+convert(varchar,@page_size)+ ' '+@select_list+' from '+@table_name+' where '+@where+' '+@order_by40
else41
begin42
select @record_min=(@page_index-1)*@page_size43
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_by46
end47
print @sql_str48
exec(@sql_str)49

50

51
select @sql_str='select 1 from ' +@table_name+' '+@newin_where52
exec(@sql_str)53

54
return @@rowcount55

56

57


浙公网安备 33010602011771号