Chinaunix首页 | 论坛 | 博客
  • 博客访问: 127214
  • 博文数量: 76
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 870
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-03 20:35
文章分类
文章存档

2010年(3)

2009年(66)

2008年(7)

我的朋友

分类:

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

阅读(206) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~