桃李不言,下自成蹊;软件工程师,非某语言的程序员

通用的分页存储过程,很久以前写的

 

 1 CREATE procedure [dbo].[CommonPageSelect]
 2 (
 3  @SqlTable varchar(5000),--要查询的表或视图,也可以一句sql语句
 4  @SqlColumn varchar(4000),--查询的字段
 5  @SqlWhere varchar(800)=''--查询条件
 6  @pagenum int=20,--每页的记录数
 7  @beginline int=1--第几页,默认第一页
 8  @SqlPK varchar(100),--主键
 9  @SqlOrder Varchar(100), 
10  @Count int=0 output
11 )
12 as
13 set nocount on
14 declare @PageLowerBound int
15 declare @PageUpperBound int
16 declare @sqlstr nvarchar(4000)
17 
18 
19  
20 --获取记录数
21 IF @beginline=1 --可根据实际要求修改条件,如果是总是获取记录数
22 BEGIN
23     set @sqlstr=N'select @sCount=count(1) FROM '+@SqlTable     
24     
25     if @SqlWhere !='' 
26     begin
27         set @sqlstr= @sqlstr +' where 1=1 '+@SqlWhere
28     end     
29     print @sqlstr
30     Exec sp_executesql @sqlstr,N'@sCount int outPut',@Count output
31 
32     if(CHARINDEX('Distinct ',@SqlColumn)>=0)
33     begin
34        set @sqlstr= 'select Distinct top '+Convert(varchar(10),@pagenum)+' '+REPLACE(@SqlColumn,'Distinct ',' ')+' from '+@SqlTable
35     end
36     else
37     begin
38     set @sqlstr= 'select top '+Convert(varchar(10),@pagenum)+' '+@SqlColumn+' from '+@SqlTable 
39     end
40     if @SqlWhere !='' 
41     begin
42         set @sqlstr= @sqlstr +' where 1=1 '+@SqlWhere
43     end 
44     if @SqlOrder !='' 
45     begin
46         set @sqlstr= @sqlstr +' '+@SqlOrder
47     end 
48     print @sqlstr
49     Exec sp_executesql @sqlstr
50     select @Count
51     return 
52 END
53 else
54 begin
55     select @Count =0 
56 end
57 
58 print @Count
59 /**/
60 set @PageLowerBound=(@beginline-1)*@pagenum
61 set @PageUpperBound=@PageLowerBound+@pagenum
62 
63 create table #pageindex(rowcountid int identity(1,1not null,pageindexpkid int)
64 set rowcount @PageUpperBound 
65 set @sqlstr=N'insert into #pageindex(pageindexpkid) select '+@SqlPK+' from '+@SqlTable
66 if @SqlWhere !='' 
67 begin
68     set @sqlstr= @sqlstr +' where 1=1 '+@SqlWhere
69 end 
70 if @SqlOrder !='' 
71 begin
72     set @sqlstr= @sqlstr +' '+@SqlOrder
73 end 
74 
75 print @sqlstr
76 Exec sp_executesql @sqlstr
77 
78 set @sqlstr='select '+@SqlColumn+',p.rowcountid FROM '+ @SqlTable +' inner join #pageindex p on '+@SqlPK+'=p.pageindexpkid and (p.rowcountid>'+Convert(varchar(15),@PageLowerBound)+') and (p.rowcountid<='+Convert(varchar(15),@PageUpperBound)+')' 
79 print @sqlstr
80 Exec sp_executesql @sqlstr
81 
82 
83 set nocount off
84 drop table #pageindex
85 
86 
87 GO
88 
posted @ 2007-02-11 13:22  假正经哥哥  阅读(487)  评论(2编辑  收藏  举报