sql server中千万数量级分页存储过程代码

千万数量级分页存储过程

参数说明:1.Tables:表名称,视图2.PrimaryKey:主关键字3.Sort:排序语句,不带OrderBy比如:NewsIDDesc,OrderRowsAsc4.CurrentPage:当前页码5.PageSize:分页尺寸6.Filter:过滤语句,不带Where7.Group:Group语句,不带GroupBy

    1. CREATE PROCEDURE CN5135_SP_Pagination
    2. /*
    3. ***************************************************************
    4. **  中国无忧商务网千万数量级分页存储过程                     **
    5. ***************************************************************
    6. 参数说明:
    7. 1.Tables             :表名称,视图
    8. 2.PrimaryKey         :主关键字
    9. 3.Sort               :排序语句,不带Order By 比如:NewsID Desc,OrderRows Asc
    10. 4.CurrentPage        :当前页码
    11. 5.PageSize           :分页尺寸
    12. 6.Filter             :过滤语句,不带Where
  1. 7.Group             :Group语句,不带Group By
  2. 版权所有:中国无忧商务网(http://www.cn5135.com)
  3. 欢迎试用,有什么心得请 Mail:xzhijun@GMail.com
  4. 注:转载请保留相关版权说明,谢谢!^_^
  5. ***************************************************************/
  6. (
  7. @Tables varchar(1000),
  8. @PrimaryKey varchar(100),
  9. @Sort varchar(200) = NULL,
  10. @CurrentPage int = 1,
  11. @PageSize int = 10,
  12. @Fields varchar(1000) = ‘*’,
  13. @Filter varchar(1000) = NULL,
  14. @Group varchar(1000) = NULL
  15. )
  16. AS
  17. /*默认排序*/
  18. IF @Sort IS NULL OR @Sort = ”
  19. SET @Sort = @PrimaryKey
  20. DECLARE @SortTable varchar(100)
  21. DECLARE @SortName varchar(100)
  22. DECLARE @strSortColumn varchar(200)
  23. DECLARE @operator char(2)
  24. DECLARE @type varchar(100)
  25. DECLARE @prec int
  26. /*设定排序语句.*/
  27. IF CHARINDEX(‘DESC’,@Sort)>0
  28. BEGIN
  29. SET @strSortColumn = REPLACE(@Sort, ‘DESC’, ”)
  30. SET @operator = ‘<=’
  31. END
  32. ELSE
  33. BEGIN
  34. IF CHARINDEX(‘ASC’, @Sort) = 0
  35. SET @strSortColumn = REPLACE(@Sort, ‘ASC’, ”)
  36. SET @operator = ‘>=’
  37. END
  38. IF CHARINDEX(‘.’, @strSortColumn) > 0
  39. BEGIN
  40. SET @SortTable = SUBSTRING(@strSortColumn, 0, CHARINDEX(‘.’,@strSortColumn))
  41. SET @SortName = SUBSTRING(@strSortColumn, CHARINDEX(‘.’,@strSortColumn) + 1, LEN(@strSortColumn))
  42. END
  43. ELSE
  44. BEGIN
  45. SET @SortTable = @Tables
  46. SET @SortName = @strSortColumn
  47. END
  48. SELECT @type=t.name, @prec=c.prec
  49. FROM sysobjects o
  50. JOIN syscolumns c on o.id=c.id
  51. JOIN systypes t on c.xusertype=t.xusertype
  52. WHERE o.name = @SortTable AND c.name = @SortName
  53. IF CHARINDEX(‘char’, @type) > 0
  54.    SET @type = @type + ‘(‘ + CAST(@prec AS varchar) + ‘)’
  55. DECLARE @strPageSize varchar(50)
  56. DECLARE @strStartRow varchar(50)
  57. DECLARE @strFilter varchar(1000)
  58. DECLARE @strSimpleFilter varchar(1000)
  59. DECLARE @strGroup varchar(1000)
  60. /*默认当前页*/
  61. IF @CurrentPage < 1
  62. SET @CurrentPage = 1
  63. /*设置分页参数.*/
  64. SET @strPageSize = CAST(@PageSize AS varchar(50))
  65. SET @strStartRow = CAST(((@CurrentPage – 1)*@PageSize + 1) AS varchar(50))
  66. /*筛选以及分组语句.*/
  67. IF @Filter IS NOT NULL AND @Filter != ”
  68. BEGIN
  69. SET @strFilter = ‘ WHERE ‘ + @Filter + ‘ ‘
  70. SET @strSimpleFilter = ‘ AND ‘ + @Filter + ‘ ‘
  71. END
  72. ELSE
  73. BEGIN
  74. SET @strSimpleFilter = ”
  75. SET @strFilter = ”
  76. END
  77. IF @Group IS NOT NULL AND @Group != ”
  78. SET @strGroup = ‘ GROUP BY ‘ + @Group + ‘ ‘
  79. ELSE
  80. SET @strGroup = ”
  81. /*执行查询语句*/
  82. EXEC(
  83. DECLARE @SortColumn ‘ + @type + ‘
  84. SET ROWCOUNT ‘ + @strStartRow + ‘
  85. SELECT @SortColumn=’ + @strSortColumn + ‘ FROM ‘ + @Tables + @strFilter + ‘ ‘ + @strGroup + ‘ ORDER BY ‘ + @Sort + ‘
  86. SET ROWCOUNT ‘ + @strPageSize + ‘
  87. SELECT ‘ + @Fields + ‘ FROM ‘ + @Tables + ‘ WHERE ‘ + @strSortColumn + @operator + ‘ @SortColumn ‘ + @strSimpleFilter + ‘ ‘ + @strGroup + ‘ ORDER BY ‘ + @Sort + ‘
  88. )
  89. GO
© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发

请登录后发表评论