千万数量级分页存储过程(带效果演示)

 

  1  [ 分享 ] 千万数量级分页存储过程(带效果演示)
  3 
  4  CREATE   PROCEDURE  CN5135_SP_Pagination
  5  /*
  6  ***************************************************************
  7  ** 千万数量级分页存储过程 **
  8  ***************************************************************
  9  参数说明:
 10  1.Tables :表名称,视图
 11  2.PrimaryKey :主关键字
 12  3.Sort :排序语句,不带Order By 比如:NewsID Desc,OrderRows Asc
 13  4.CurrentPage :当前页码
 14  5.PageSize :分页尺寸
 15  6.Filter :过滤语句,不带Where 
 16  7.Group :Group语句,不带Group By
 17  效果演示:http://www.cn5135.com/_App/Opportunities/QueryResult.aspx
 18  ************************************************************** */
 19  (
 20  @Tables   varchar ( 1000 ),
 21  @PrimaryKey   varchar ( 100 ),
 22  @Sort   varchar ( 200 =   NULL ,
 23  @CurrentPage   int   =   1 ,
 24  @PageSize   int   =   10 ,
 25  @Fields   varchar ( 1000 =   ' * ' ,
 26  @Filter   varchar ( 1000 =   NULL ,
 27  @Group   varchar ( 1000 =   NULL
 28  )
 29  AS
 30  /* 默认排序 */
 31  IF   @Sort   IS   NULL   OR   @Sort   =   ''
 32  SET   @Sort   =   @PrimaryKey
 33  DECLARE   @SortTable   varchar ( 100 )
 34  DECLARE   @SortName   varchar ( 100 )
 35  DECLARE   @strSortColumn   varchar ( 200 )
 36  DECLARE   @operator   char ( 2 )
 37  DECLARE   @type   varchar ( 100 )
 38  DECLARE   @prec   int
 39  /* 设定排序语句. */
 40  IF   CHARINDEX ( ' DESC ' , @Sort ) > 0
 41  BEGIN
 42  SET   @strSortColumn   =   REPLACE ( @Sort ' DESC ' '' )
 43  SET   @operator   =   ' <= '
 44  END
 45  ELSE
 46  BEGIN
 47  IF   CHARINDEX ( ' ASC ' @Sort =   0
 48  SET   @strSortColumn   =   REPLACE ( @Sort ' ASC ' '' )
 49  SET   @operator   =   ' >= '
 50  END
 51  IF   CHARINDEX ( ' . ' @strSortColumn >   0
 52  BEGIN
 53  SET   @SortTable   =   SUBSTRING ( @strSortColumn 0 CHARINDEX ( ' . ' , @strSortColumn ))
 54  SET   @SortName   =   SUBSTRING ( @strSortColumn CHARINDEX ( ' . ' , @strSortColumn +   1 LEN ( @strSortColumn ))
 55  END
 56  ELSE
 57  BEGIN
 58  SET   @SortTable   =   @Tables
 59  SET   @SortName   =   @strSortColumn
 60  END
 61  SELECT   @type = t.name,  @prec = c.prec
 62  FROM  sysobjects o 
 63  JOIN  syscolumns c  on  o.id = c.id
 64  JOIN  systypes t  on  c.xusertype = t.xusertype
 65  WHERE  o.name  =   @SortTable   AND  c.name  =   @SortName
 66  IF   CHARINDEX ( ' char ' @type >   0
 67  SET   @type   =   @type   +   ' ( '   +   CAST ( @prec   AS   varchar +   ' ) '
 68  DECLARE   @strPageSize   varchar ( 50 )
 69  DECLARE   @strStartRow   varchar ( 50 )
 70  DECLARE   @strFilter   varchar ( 1000 )
 71  DECLARE   @strSimpleFilter   varchar ( 1000 )
 72  DECLARE   @strGroup   varchar ( 1000 )
 73  /* 默认当前页 */
 74  IF   @CurrentPage   <   1
 75  SET   @CurrentPage   =   1
 76  /* 设置分页参数. */
 77  SET   @strPageSize   =   CAST ( @PageSize   AS   varchar ( 50 ))
 78  SET   @strStartRow   =   CAST ((( @CurrentPage   -   1 ) * @PageSize   +   1 AS   varchar ( 50 ))
 79  /* 筛选以及分组语句. */
 80  IF   @Filter   IS   NOT   NULL   AND   @Filter   !=   ''
 81  BEGIN
 82  SET   @strFilter   =   '  WHERE  '   +   @Filter   +   '   '
 83  SET   @strSimpleFilter   =   '  AND  '   +   @Filter   +   '   '
 84  END
 85  ELSE
 86  BEGIN
 87  SET   @strSimpleFilter   =   ''
 88  SET   @strFilter   =   ''
 89  END
 90  IF   @Group   IS   NOT   NULL   AND   @Group   !=   ''
 91  SET   @strGroup   =   '  GROUP BY  '   +   @Group   +   '   '
 92  ELSE
 93  SET   @strGroup   =   ''
 94  /* 执行查询语句 */
 95  EXEC (
 96  '
 97  DECLARE @SortColumn  '   +   @type   +   '
 98  SET ROWCOUNT  '   +   @strStartRow   +   '
 99  SELECT @SortColumn= '   +   @strSortColumn   +   '  FROM  '   +   @Tables   +   @strFilter   +   '   '   +   @strGroup   +   '  ORDER BY  '   +   @Sort   +   '
100  SET ROWCOUNT  '   +   @strPageSize   +   '
101  SELECT  '   +   @Fields   +   '  FROM  '   +   @Tables   +   '  WHERE  '   +   @strSortColumn   +   @operator   +   '  @SortColumn  '   +   @strSimpleFilter   +   '   '   +   @strGroup   +   '  ORDER BY  '   +   @Sort   +   '
102  '
103  )
104  GO
105 

你可能感兴趣的:(存储过程)