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

时间:2022-06-01 20:31:02

中国无忧商务网千万数量级分页存储过程

参数说明: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   
  13. 7.Group             :Group语句,不带Group By  
  14.  
  15. 版权所有:中国无忧商务网(http://www.cn5135.com)  
  16. 欢迎试用,有什么心得请 Mail:xzhijun@GMail.com  
  17. 注:转载请保留相关版权说明,谢谢!^_^  
  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. /*默认排序*/  
  32. IF @Sort IS NULL OR @Sort = ''  
  33. SET @Sort = @PrimaryKey  
  34.  
  35. DECLARE @SortTable varchar(100)  
  36. DECLARE @SortName varchar(100)  
  37. DECLARE @strSortColumn varchar(200)  
  38. DECLARE @operator char(2)  
  39. DECLARE @type varchar(100)  
  40. DECLARE @prec int  
  41.  
  42. /*设定排序语句.*/  
  43. IF CHARINDEX('DESC',@Sort)>0  
  44. BEGIN  
  45. SET @strSortColumn = REPLACE(@Sort, 'DESC''')  
  46. SET @operator = '<='  
  47. END  
  48. ELSE  
  49. BEGIN  
  50. IF CHARINDEX('ASC', @Sort) = 0  
  51. SET @strSortColumn = REPLACE(@Sort, 'ASC''')  
  52. SET @operator = '>='  
  53. END  
  54.  
  55.  
  56. IF CHARINDEX('.', @strSortColumn) > 0  
  57. BEGIN  
  58. SET @SortTable = SUBSTRING(@strSortColumn, 0, CHARINDEX('.',@strSortColumn))  
  59. SET @SortName = SUBSTRING(@strSortColumn, CHARINDEX('.',@strSortColumn) + 1, LEN(@strSortColumn))  
  60. END  
  61. ELSE  
  62. BEGIN  
  63. SET @SortTable = @Tables  
  64. SET @SortName = @strSortColumn  
  65. END  
  66.  
  67. SELECT @type=t.name, @prec=c.prec  
  68. FROM sysobjects o   
  69. JOIN syscolumns c on o.id=c.id  
  70. JOIN systypes t on c.xusertype=t.xusertype  
  71. WHERE o.name = @SortTable AND c.name = @SortName  
  72.  
  73. IF CHARINDEX('char', @type) > 0  
  74.    SET @type = @type + '(' + CAST(@prec AS varchar) + ')'  
  75.  
  76. DECLARE @strPageSize varchar(50)  
  77. DECLARE @strStartRow varchar(50)  
  78. DECLARE @strFilter varchar(1000)  
  79. DECLARE @strSimpleFilter varchar(1000)  
  80. DECLARE @strGroup varchar(1000)  
  81.  
  82. /*默认当前页*/  
  83. IF @CurrentPage < 1  
  84. SET @CurrentPage = 1  
  85.  
  86. /*设置分页参数.*/  
  87. SET @strPageSize = CAST(@PageSize AS varchar(50))  
  88. SET @strStartRow = CAST(((@CurrentPage - 1)*@PageSize + 1) AS varchar(50))  
  89.  
  90. /*筛选以及分组语句.*/  
  91. IF @Filter IS NOT NULL AND @Filter != ''  
  92. BEGIN  
  93. SET @strFilter = ' WHERE ' + @Filter + ' '  
  94. SET @strSimpleFilter = ' AND ' + @Filter + ' '  
  95. END  
  96. ELSE  
  97. BEGIN  
  98. SET @strSimpleFilter = ''  
  99. SET @strFilter = ''  
  100. END  
  101. IF @Group IS NOT NULL AND @Group != ''  
  102. SET @strGroup = ' GROUP BY ' + @Group + ' '  
  103. ELSE  
  104. SET @strGroup = ''  
  105.  
  106. /*执行查询语句*/  
  107. EXEC(  
  108. '  
  109. DECLARE @SortColumn ' + @type + '  
  110. SET ROWCOUNT ' + @strStartRow + '  
  111. SELECT @SortColumn=' + @strSortColumn + ' FROM ' + @Tables + @strFilter + ' ' + @strGroup + ' ORDER BY ' + @Sort + '  
  112. SET ROWCOUNT ' + @strPageSize + '  
  113. SELECT ' + @Fields + ' FROM ' + @Tables + ' WHERE ' + @strSortColumn + @operator + ' @SortColumn ' + @strSimpleFilter + ' ' + @strGroup + ' ORDER BY ' + @Sort + '  
  114. '  
  115. )  
  116. GO