分页存储过程2

CREATE  PROCEDURE  Paging_RowCount
(
@Tables  varchar(1000),
@PK  varchar(100),
@Sort  varchar(200)  =  NULL,
@PageNumber  int  =  1,
@PageSize  int  =  10,
@Fields  varchar(1000)  =  '*',
@Filter  varchar(1000)  =  NULL,
@Group  varchar(1000)  =  NULL)
AS

/*Default  Sorting*/
IF  @Sort  IS  NULL  OR  @Sort  =  ''
SET  @Sort  =  @PK

/*Find  the  @PK  type*/
DECLARE  @SortTable  varchar(100)
DECLARE  @SortName  varchar(100)
DECLARE  @strSortColumn  varchar(200)
DECLARE  @operator  char(2)
DECLARE  @type  varchar(100)
DECLARE  @prec  int

/*Set  sorting  variables.*/
IF  CHARINDEX('DESC',@Sort)>0
BEGIN
 SET  @strSortColumn  =  REPLACE(@Sort,  'DESC',  '')
 SET  @operator  =  '<='
END
ELSE
 BEGIN
  IF  CHARINDEX('ASC',  @Sort)  =  0
  SET  @strSortColumn  =  REPLACE(@Sort,  'ASC',  '')
  SET  @operator  =  '>='
 END


 IF  CHARINDEX('.',  @strSortColumn)  >  0
 BEGIN
  SET  @SortTable  =  SUBSTRING(@strSortColumn,  0,  CHARINDEX('.',@strSortColumn))
  SET  @SortName  =  SUBSTRING(@strSortColumn,  CHARINDEX('.',@strSortColumn)  +  1,  LEN(@strSortColumn))
 END
ELSE
 BEGIN
  SET  @SortTable  =  @Tables
  SET  @SortName  =  @strSortColumn
 END

 SELECT  @type=t.name,  @prec=c.prec
 FROM  sysobjects  o
 JOIN  syscolumns  c  on  o.id=c.id
 JOIN  systypes  t  on  c.xusertype=t.xusertype
 WHERE  o.name  =  @SortTable  AND  c.name  =  @SortName

 IF  CHARINDEX('char',  @type)  >  0
 SET  @type  =  @type  +  '('  +  CAST(@prec  AS  varchar)  +  ')'

 DECLARE  @strPageSize  varchar(50)
 DECLARE  @strStartRow  varchar(50)
 DECLARE  @strFilter  varchar(1000)
 DECLARE  @strSimpleFilter  varchar(1000)
 DECLARE  @strGroup  varchar(1000)

 /*Default  Page  Number*/
 IF  @PageNumber  <  1
 SET  @PageNumber  =  1

 /*Set  paging  variables.*/
 SET  @strPageSize  =  CAST(@PageSize  AS  varchar(50))
 SET  @strStartRow  =  CAST(((@PageNumber  -  1)*@PageSize  +  1)  AS  varchar(50))

 /*Set  filter  &  group  variables.*/
 IF  @Filter  IS  NOT  NULL  AND  @Filter  !=  ''
 BEGIN
  SET  @strFilter  =  '  WHERE  '  +  @Filter  +  '  '
  SET  @strSimpleFilter  =  '  AND  '  +  @Filter  +  '  '
 END
ELSE
 BEGIN
  SET  @strSimpleFilter  =  ''
  SET  @strFilter  =  ''
 END
 IF  @Group  IS  NOT  NULL  AND  @Group  !=  ''
 SET  @strGroup  =  '  GROUP  BY  '  +  @Group  +  '  '
ELSE
 SET  @strGroup  =  ''

 /*Execute  dynamic  query*/
 EXEC(
 '
 DECLARE  @SortColumn  '  +  @type  +  '
 SET  ROWCOUNT  '  +  @strStartRow  +  '
 SELECT  @SortColumn='  +  @strSortColumn  +  '  FROM  '  +  @Tables  +  @strFilter  +  '  '  +  @strGroup  +  '  ORDER  BY  '  +  @Sort  +  '
 SET  ROWCOUNT  '  +  @strPageSize  +  '
 SELECT  '  +  @Fields  +  '  FROM  '  +  @Tables  +  '  WHERE  '  +  @strSortColumn  +  @operator  +  '  @SortColumn  '  +  @strSimpleFilter  +  '  '  +  @strGroup  +  '  ORDER  BY  '  +  @Sort  +  '
 '
 )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值