简版通用分页过程

本过程适用于sql server 2000以上版本,采用not in 拼接SQL

分页存储过程
--CREATE PROCEDURE sp_paging

declare @pagesize int   --每页显示条数
, @pageindex int  --当前页
, @tables varchar(3000)  --显示的表
, @fields varchar(5000)  --显示字段
, @orderfield varchar(300) --排序字段
, @pkfield varchar(300)  --主键字段
, @strwhere varchar(1000) --查询条件
, @strgroup varchar(500)  --group by汇总条件
--AS
set @pagesize=20
set @pageindex=3
set @tables='employee'
set @fields='*'
set @orderfield='emp_id'
set @pkfield='emp_id'
set @strwhere=''
set @strgroup=''

 


declare @strsql nvarchar(4000), @strend varchar(2000), @strorder varchar(1000), @strcount varchar(2000), @strwherecount nvarchar(1000)

select @strwherecount=(case when len(ltrim(@strwhere))>0 then case when charIndex('where',@tables)>0 then ' and '+@strwhere else ' where '+@strwhere end else '' end)
,@strgroup=(case when len(ltrim(@strgroup))=0 or charIndex('group by',@strgroup)>0 then ' '+@strgroup else ' group by '+@strgroup end) 
,@strorder=(case when len(ltrim(@orderfield))>0 then ' order by '+ @orderfield else '' end)

select @strcount='(select count(1) from (select 1 val from '+@tables+@strwherecount+@strgroup+' ) tab_sel) row_count,'
, @strend =  (case when charIndex('where',@tables)>0 then ' and ' else ' where ' end) + case when @pageindex=1 then @strwhere else  @strwhere + case when len(ltrim(@strwhere))>0 then ' and ' else '' end + @pkfield + ' not in ( select top ' + convert(varchar(10),(@pageindex-1)*@pagesize) + ' ' + @pkfield + ' from ' + @tables + @strwherecount + @strgroup + @strorder + ')' end

set @strsql='select top '+convert(varchar(4),@pagesize)+' '+@strcount + @fields + ' from ' + @tables + @strend + @strgroup + @strorder
exec(@strsql)
print(@strsql)
GO

posted on 2009-09-30 09:30  sgm  阅读(604)  评论(3)    收藏  举报

导航