markdown 通用分页存储过程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了markdown 通用分页存储过程相关的知识,希望对你有一定的参考价值。

## 通用分页存储过程
```sql
GO  
-- =============================================  
-- Author:      lenya  
-- Create date: 2011/7/1  
-- Description: 通用分页存储过程  
-- =============================================  
  
ALTER PROCEDURE [dbo].[pr_commonPagination]  
    @StrSql NVARCHAR(MAX) ,  
    @WhereClause VARCHAR(200) ,    --条件,可以为空,不加"where"  
    @SortClause VARCHAR(100) ,--排序字段,可以为空,不加"Order by"  
    @PageIndex INT ,--当前页码  
    @PageCount INT ,--每页条数  
    @TotalNum INT OUTPUT --总记录条数  
      
AS  
BEGIN  
  
    SET NOCOUNT ON;  
    DECLARE @ExeSql VARCHAR(MAX)  
    DECLARE @StrWhere VARCHAR(220)   
    DECLARE @OrderByStr VARCHAR(120)  
    DECLARE @StartRowIndex INT  
    DECLARE @EndRowIndex INT  
    CREATE TABLE #temp(rowscnt INT)  
  
    --set @StrSql = dbo.fn_convertSpecialCharacter(@StrSql) 特殊字符转义  
    --set @WhereClause = dbo.fn_convertSpecialCharacter(@StrWhere)  
      
    if @PageIndex<0  
        SET @PageIndex = 1  
          
    if @PageCount<0  
        SET @PageCount=10  
          
          
    SET @StartRowIndex = ( @PageIndex - 1 ) * @PageCount + 1  
    SET @EndRowIndex = @PageIndex * @PageCount  
    SET @StrWhere = ''  
    IF (@PageIndex = 0 and @PageCount=0)  --如果页索引及页面条数均设置为0,则返回所有记录.  
        BEGIN  
            SET @StartRowIndex = 1  
            SET @EndRowIndex = 2147483647 --int最大值  
        END  
  
  
    /*--条件筛选--*/  
    IF len(LTRIM(@WhereClause))>0  
        BEGIN  
            SET @StrWhere = ' where ' + @WhereClause  
        END  
  
    /*--排序--*/  
    IF len(LTRIM(@SortClause))>0  
        SET @OrderByStr = ' order by ' + @SortClause  
    ELSE  
        SET @OrderByStr = ' order by (select 0) '--默认排序,ROW_NUMBER()需要它.  
    
  
   
    /*---查询总数-*/  
    EXEC('insert into #temp select count(*) from ( '+@StrSql+') as cnt '+ @StrWhere)  
    select @TotalNum = rowscnt from #temp  
  
  
    /*---执行查询-*/  
    SET @ExeSql = 'select row_number() over ('+@OrderByStr+')as rowIndex, * from ('+@StrSql+') as query' + @StrWhere  
    SET @ExeSql = 'select * from (' + @ExeSql + ') AS result where rowIndex between ' + CAST(@StartRowIndex AS VARCHAR)  
        + ' And ' + CAST(@EndRowIndex AS VARCHAR) + ' ' + @OrderByStr    
  
    EXEC(@ExeSql)  
           
    drop table #temp  
END   
``` 

以上是关于markdown 通用分页存储过程的主要内容,如果未能解决你的问题,请参考以下文章

三大数据库下的存储过程实现通用分页

通用分页存储过程

通用分页存储过程,干货无污染

SQL SERVER 通用分页存储过程

通用分页存储过程

SQL存储过程分页(通用的拼接SQL语句思路实现)