经过大项目考验的分页

    技术2022-05-19  22

    /********************************************************************************* *      Function:  SuperPaging *      Description: *             超强通用分页存储过程 *      Author: *             邱学军(Ryan) *             lifergb@hotmail.com *      Finish DateTime: *             2005年9月24日 *      History: *             2006/4/21 Edit By Michael Li         *       Example: *              SuperPaging @TableName='表名',@Orderfld='排序列名'           *********************************************************************************/ CREATE PROCEDURE SupesoftPage (     @TableName        nvarchar(50),            -- 表名     @ReturnFields    nvarchar(2000) = '*',    -- 需要返回的列     @PageSize        int = 10,                -- 每页记录数     @PageIndex        int = 1,                -- 当前页码     @Where            nvarchar(2000) = '',        -- 查询条件     @Orderfld        nvarchar(2000),            -- 排序字段名 最好为唯一主键     @OrderType        int = 1                    -- 排序类型 1:降序 其它为升序     ) AS     DECLARE @TotalRecord int     DECLARE @TotalPage int     DECLARE @CurrentPageSize int     DECLARE @TotalRecordForPageIndex int     DECLARE @OrderBy nvarchar(255)     DECLARE @CutOrderBy nvarchar(255)         if @OrderType = 1         BEGIN             set @OrderBy = ' Order by ' + @Orderfld + ' desc '             set @CutOrderBy = ' Order by '+ @Orderfld + ' asc '         END     else         BEGIN             set @OrderBy = ' Order by ' + @Orderfld + ' asc '             set @CutOrderBy = ' Order by '+ @Orderfld + ' desc '                    END                 -- 记录总数     declare @countSql nvarchar(4000)      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=@PageSize         IF(@TotalPage=@PageIndex)     BEGIN         SET @CurrentPageSize=@TotalRecord%@PageSize         IF(@CurrentPageSize=0)             SET @CurrentPageSize=@PageSize     END     -- 返回记录     set @TotalRecordForPageIndex=@PageIndex*@PageSize     exec('SELECT * FROM         (SELECT TOP '+@CurrentPageSize+' * FROM             (SELECT TOP '+@TotalRecordForPageIndex+' '+@ReturnFields+'             FROM '+@TableName+' '+@Where+' '+@OrderBy+') TB2         '+@CutOrderBy+') TB3               '+@OrderBy)     -- 返回总页数和总记录数     SELECT @TotalPage as PageCount,@TotalRecord as RecordCount GO

     

     


    最新回复(0)