sql 分页存储过程
2006-12-19 22:24
393 查看
/*
过程说明:对表按任意字段进行排序分页
创建时间:2005年7月24日
作者: chen gang
*/
CREATE PROCEDURE dbo.GetPagingRecord
(
@tablename varchar(100),--表名或视图表
@fieldlist varchar(4000)='*',--欲选择字段列表
@orderfield varchar(100),--排序字段
@keyfield varchar(100),--主键
@pageindex int,--页号,从1开始
@pagesize int=20,--页尺寸
@strwhere varchar(4000),--条件
@ordertype varchar(1)='1'--排序,1,降序,0,升序
)
AS
SET NOCOUNT ON
declare @sqlstr varchar(6000)
declare @orderstr varchar(100)
if(@keyfield=@orderfield)
begin
set @orderstr = ''
end
else
begin
set @orderstr = ','+@keyfield+' asc'
end
if @pageindex<=0
set @pageindex=1
--处理SQL中危险字符,并且将条件处理成易嵌入的形式
set @strwhere=replace(@strwhere,'''','''''')
set @strwhere=replace(@strwhere,'--','')
set @strwhere=replace(@strwhere,';','')
set @sqlstr='declare @CurPageNum int;'
set @sqlstr=@sqlstr+'declare @nextpagenum int;'
set @sqlstr=@sqlstr+'set @curpagenum='+cast(@PageIndex-1 as varchar)+'*'+cast(@Pagesize as varchar)+';'
set @sqlstr=@sqlstr+'set @nextpagenum='+cast(@PageIndex as varchar)+'*'+cast(@Pagesize as varchar)+';'
set @sqlstr=@sqlstr+'declare @sqlstr varchar(6000);'
if @ordertype='1'
begin
set @sqlstr=@sqlstr+'set @sqlstr=''select '+@fieldlist+' from ( select top ''+cast(@nextpagenum as varchar)+'' * from
'+@tablename+' where 1=1 '+@strwhere+' order by '+@orderfield+' desc' + @orderstr+') as a where 1=1 and '+@keyfield+' not in (
select top ''+cast(@curpagenum as varchar)+'' '+@keyfield+' from '+@tablename+' where 1=1 '+@strwhere+'
order by '+@orderfield +' desc'+ @orderstr +') order by ' + @orderfield +' desc'';'
end
else
begin
set @sqlstr=@sqlstr+'set @sqlstr=''select '+@fieldlist+' from ( select top ''+cast(@nextpagenum as varchar)+'' * from
'+@tablename+' where 1=1 '+@strwhere+' order by '+@orderfield+' asc' + @orderstr+' ) as a where 1=1 and '+@keyfield+' not in (
select top ''+cast(@curpagenum as varchar)+'' '+@keyfield+' from '+@tablename+' where 1=1 '+@strwhere+'
order by '+@orderfield +' asc' + @orderstr+') order by '+@orderfield +' asc'';'
end
set @sqlstr=@sqlstr+'execute( @sqlstr)'
print @sqlstr
execute(@sqlstr)
GO
过程说明:对表按任意字段进行排序分页
创建时间:2005年7月24日
作者: chen gang
*/
CREATE PROCEDURE dbo.GetPagingRecord
(
@tablename varchar(100),--表名或视图表
@fieldlist varchar(4000)='*',--欲选择字段列表
@orderfield varchar(100),--排序字段
@keyfield varchar(100),--主键
@pageindex int,--页号,从1开始
@pagesize int=20,--页尺寸
@strwhere varchar(4000),--条件
@ordertype varchar(1)='1'--排序,1,降序,0,升序
)
AS
SET NOCOUNT ON
declare @sqlstr varchar(6000)
declare @orderstr varchar(100)
if(@keyfield=@orderfield)
begin
set @orderstr = ''
end
else
begin
set @orderstr = ','+@keyfield+' asc'
end
if @pageindex<=0
set @pageindex=1
--处理SQL中危险字符,并且将条件处理成易嵌入的形式
set @strwhere=replace(@strwhere,'''','''''')
set @strwhere=replace(@strwhere,'--','')
set @strwhere=replace(@strwhere,';','')
set @sqlstr='declare @CurPageNum int;'
set @sqlstr=@sqlstr+'declare @nextpagenum int;'
set @sqlstr=@sqlstr+'set @curpagenum='+cast(@PageIndex-1 as varchar)+'*'+cast(@Pagesize as varchar)+';'
set @sqlstr=@sqlstr+'set @nextpagenum='+cast(@PageIndex as varchar)+'*'+cast(@Pagesize as varchar)+';'
set @sqlstr=@sqlstr+'declare @sqlstr varchar(6000);'
if @ordertype='1'
begin
set @sqlstr=@sqlstr+'set @sqlstr=''select '+@fieldlist+' from ( select top ''+cast(@nextpagenum as varchar)+'' * from
'+@tablename+' where 1=1 '+@strwhere+' order by '+@orderfield+' desc' + @orderstr+') as a where 1=1 and '+@keyfield+' not in (
select top ''+cast(@curpagenum as varchar)+'' '+@keyfield+' from '+@tablename+' where 1=1 '+@strwhere+'
order by '+@orderfield +' desc'+ @orderstr +') order by ' + @orderfield +' desc'';'
end
else
begin
set @sqlstr=@sqlstr+'set @sqlstr=''select '+@fieldlist+' from ( select top ''+cast(@nextpagenum as varchar)+'' * from
'+@tablename+' where 1=1 '+@strwhere+' order by '+@orderfield+' asc' + @orderstr+' ) as a where 1=1 and '+@keyfield+' not in (
select top ''+cast(@curpagenum as varchar)+'' '+@keyfield+' from '+@tablename+' where 1=1 '+@strwhere+'
order by '+@orderfield +' asc' + @orderstr+') order by '+@orderfield +' asc'';'
end
set @sqlstr=@sqlstr+'execute( @sqlstr)'
print @sqlstr
execute(@sqlstr)
GO
相关文章推荐
- 一个简单的SQl存储过程分页
- 经过优化测试的SQL分页存储过程
- 又一个不错的sql分页存储过程,支持排序、搜索
- SQL 存储过程分页--在网上找到代码,收藏起来
- sql 存储过程分页
- 数据库开发必看 -- 用索引优化SQL,开发优秀的分页存储过程(一)
- sql 分页存储过程
- sql通用分页自定义表条件存储过程
- sql 分页取数据的存储过程
- sql分页存储过程(汇总)
- 邹老大的分页sql存储过程
- T-sql 存储过程的分页
- 李洪根关于[SQL]对于分页存储过程
- 针对sql 2005优化的高性能分页存储过程
- 修改后的SQL分页存储过程,利用2分法,支持排序
- SQL 使用系统存储过程实现的通用分页存储过程
- asp.net SQL存储过程分页
- asp.net SQL存储过程分页
- SQL分页的存储过程详解