一个确实不错的分页存储过程.

CREATE PROCEDURE   CN5135_SP_Pagination
/*
***************************************************************
**     中国无忧商务网千万数量级分页存储过程                                           **
***************************************************************
参数说明:
1.Tables                           :表名称,视图
2.PrimaryKey                   :主关键字
3.Sort                               :排序语句,不带Order   By   比如:NewsID   Desc,OrderRows   Asc
4.CurrentPage                 :当前页码
5.PageSize                       :分页尺寸
6.Fields                             : 要返回的字段
6.Filter                           :过滤语句,不带Where  
7.Group                           :Group语句,不带Group   By   可以为空

版权所有:中国无忧商务网(http://www.cn5135.com)
欢迎试用,有什么心得请   Mail:xzhijun@GMail.com
示例代码:http://www.cn5135.com/Opportunities/Pagination.asp
注:转载请保留相关版权说明,谢谢!^_^
***************************************************************/
(
@Tables   varchar(1000),
@PrimaryKey   varchar(100),
@Sort   varchar(200)   =   NULL,
@CurrentPage   int   =   1,
@PageSize   int   =   10,
@Fields   varchar(1000)   =   '*',
@Filter   varchar(1000)   =   NULL,
@Group   varchar(1000)   =   NULL
)
AS

/*默认排序*/
IF   @Sort   IS   NULL   OR   @Sort   =   ''
SET   @Sort   =   @PrimaryKey

DECLARE   @SortTable   varchar(100)
DECLARE   @SortName   varchar(100)
DECLARE   @strSortColumn   varchar(200)
DECLARE   @operator   char(2)
DECLARE   @type   varchar(100)
DECLARE   @prec   int

/*设定排序语句.*/
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)

/*默认当前页*/
IF   @CurrentPage   <   1
SET   @CurrentPage   =   1

/*设置分页参数.*/
SET   @strPageSize   =   CAST(@PageSize   AS   varchar(50))
SET   @strStartRow   =   CAST(((@CurrentPage   -   1)*@PageSize   +   1)   AS   varchar(50))

/*筛选以及分组语句.*/
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   =   ''

/*执行查询语句*/
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、付费专栏及课程。

余额充值