网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 设计资源 > 数据库 > 正文

一个基于ROW_NUMBER()的通用分页存储过程

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务

项目中有很多小型的表(数据量不大),都需要实现分页查询,因此实现了一个通用的分页。

建立好如下的存储过程,以后要分页,直接调用改存储过程就可以了。

注意:数据量大、性能要求高的,请个性化处理。

  1. ALTER PROCEDURE [dbo].[COMMON_PROCEDURE_SelectWithPage]    
  2. @Sql VARCHAR(5000),    
  3. @CurrentPageNo  INT,    
  4. @PageSize INT,    
  5. @TotalNum INT OUTPUT   
  6. AS    
  7. SET NOCOUNT ON      
  8. DECLARE @SqlCmd VARCHAR(5000)      
  9. ------------------------------------------   --查询数据    
  10. SET @SqlCmd = 'SELECT * FROM (' + @Sql + ') A WHERE RowIndex BETWEEN ' +    CONVERT(VARCHAR,(@CurrentPageNo-1) * @PageSize + 1) + ' AND ' +    CONVERT(VARCHAR,@CurrentPageNo * @PageSize)     
  11. EXEC(@SqlCmd)  PRINT (@SqlCmd)      
  12. ------------------------------------------   --求记录总数    
  13. IF @TotalNum = -1    
  14. BEGIN     
  15. CREATE TABLE #Temp1(num INT)       
  16. INSERT INTO #Temp1  
  17. EXEC('SELECT count(*) FROM (' + @Sql + ') A')     
  18. SELECT @TotalNum=(SELECT * FROM #Temp1)       
  19. DROP TABLE #Temp1      
  20. END   

用法很简单,但必须在传入的SQL中使用ROW_NUMBER() OVER() AS RowIndex :

  1. DECLARE @Sql VARCHAR(5000)   
  2. DECLARE @CurrentPageNo INT   
  3. DECLARE @PageSize INT   
  4. DECLARE @TotalNum INT   
  5.   
  6. SET @CurrentPageNo = 100   
  7. SET @PageSize = 10   
  8. SET @TotalNum = -1   
  9. SET @Sql = '   SELECT  *,    ROW_NUMBER() OVER (ORDER BY 排序字段) AS RowIndex   FROM 表名  A WITH (NOLOCK) '    
  10.   
  11. EXEC [dbo].[COMMON_PROCEDURE_SelectWithPage] @Sql,@CurrentPageNo,@PageSize,@TotalNum OUTPUT   
  12.   
  13. SELECT @TotalNum  
设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师