分类:
2008-12-25 17:17:41
/*
分页存储过程
*/
CREATE PROCEDURE sp_paging
@pagesize int --每页显示条数
, @pageindex int --当前页
, @tables varchar(3000) --显示的表
, @fields varchar(5000) --显示字段
, @orderfield varchar(100) --排序字段
, @pkfield varchar(100) --主键字段
, @strwhere varchar(500) --查询条件
, @strgroup varchar(500)='' --group by汇总条件
AS
/*
set @pagesize=15
set @pageindex=2
set @tables='yp_supplyer where 1=1'
set @fields='*'
set @orderfield='supplyer_code'
set @pkfield='supplyer_code'
set @strwhere='py_code like ''%'''
*/
declare @strsql varchar(5000)
declare @strend varchar(2000)
declare @strorder varchar(100)
declare @strcount varchar(1000)
--取记录条数
declare @str varchar(300)
if charIndex('where',@tables)>0
begin
if len(ltrim(@strwhere))>0
set @str=' and '+@strwhere
else
set @str=''
end
else
begin
if len(ltrim(@strwhere))>0
set @str=' where '+@strwhere
else
set @str=''
end
set @strcount='(select count(1) from (select 1 val from '+@tables+@str+@strgroup+' ) tab_sel) row_count,'
--设置是否排序
if len(ltrim(@orderfield))>0
set @strorder=' order by '+@orderfield
else
set @strorder=''
--设置查询条件
if len(ltrim(@strwhere))>0
set @strwhere=@strwhere+' and '
--设置group by
if len(ltrim(@strgroup))=0 or charIndex('group by',@strgroup)>0
set @strgroup=' '+@strgroup
else
set @strgroup=' group by '+@strgroup
set @strend=@strwhere+@pkfield+' not in ( select top '+convert(varchar(10),(@pageindex-1)*@pagesize)+' '+@pkfield+' from '+@tables+@str+@strgroup+@strorder+')'
if charIndex('where',@tables)>0
set @strend=' and '+@strend
else
set @strend=' where '+@strend
--distinct
set @strsql='select top '+convert(varchar(4),@pagesize)+' '+@strcount+@fields+' from '+@tables+@strend+@strgroup+@strorder
exec(@strsql)
print @strsql
GO