分页存储过程二

/********************************************************************************* *      Function:  GetPageData              * *      Description:                                                              * *             Sql2008分页存储过程             * *      Author:                                                                   * *             SUNSHICHENG                      * *      Finish DateTime:                                                          * *             2011/9/13               * *    Example:                  * *           GetPageData @Tablename = 'Table1', @Returnfields = 'ID',           * *     @PageIndex = 0, @PageSize = 10, @Where = '', @OrderBy = 'ID',     * *     @Ordertype = 0              *           *********************************************************************************/ ALTER PROCEDURE [dbo].[Pro_GetPageData] (     @TableName  nvarchar(3000),   -- 表名  @ReturnFields nvarchar(3000) = '*', -- 需要返回的列  @PageSize  int = 10,    -- 每页记录数  @PageIndex  int = 0,    -- 当前页码  @Where   nvarchar(3000) = '',    -- 查询条件  @OrderBy  nvarchar(200),   -- 排序字段名 最好为唯一主键  @OrderType  int = 1     -- 排序类型 1:降序 其它为升序 ) AS  DECLARE @TotalRecord int  DECLARE @TotalPage int  DECLARE @CurrentPageSize int     DECLARE @TotalRecordForPageIndex int     declare @CountSql nvarchar(4000)          if @OrderType = 1   BEGIN    set @OrderBy = ' Order by ' + REPLACE(@OrderBy,',',' desc,') + ' desc '   END  else   BEGIN    set @OrderBy = ' Order by ' + REPLACE(@OrderBy,',',' asc,') + ' asc '     END    -- 总记录  set @CountSql='SELECT @TotalRecord=Count(*) From '+@TableName+' '+@Where  execute sp_executesql @CountSql,N'@TotalRecord int out',@TotalRecord out    SET @TotalPage=(@TotalRecord-1)/@PageSize+1       SET @CurrentPageSize=(@PageIndex-1)*@PageSize

    -- 返回记录  set @TotalRecordForPageIndex=@PageIndex*@PageSize    exec ('SELECT *    FROM (SELECT TOP '+@TotalRecordForPageIndex+' '+@ReturnFields+', ROW_NUMBER() OVER ('+@OrderBy+') AS ROWNUM    FROM '+@TableName+ ' ' + @Where +' ) AS TempTable    WHERE TempTable.ROWNUM >    '+@CurrentPageSize)

   -- 返回总页数和总记录  SELECT @TotalPage as PageCount,@TotalRecord as RecordCount

原文地址:https://www.cnblogs.com/sunshch/p/2438876.html