zoukankan      html  css  js  c++  java
  • 分页存储过程

    IF ( EXISTS ( SELECT * FROM sysobjects WHERE name = 'sp_KNO_Query_Recycle_kledge' ) )
        DROP PROCEDURE sp_KNO_Query_Recycle_kledge
    GO
    
    set ansi_nulls on 
    go
    
    create procedure sp_Recycle                        @AccountID    int, --企业的id号
                                                    @UserID        int=0,    --访客的标识
                                                    @beginTime    datetime='',    --开始时间
                                                    @endTime    datetime='',    --结束时间
                                                    @key        nvarchar(100)='',    --关键词
                                                    @PageSize    int,    --每页行数
                                                    @PageIndex    int,    --第x页
                                                    @RowCount    int out,    --总行数
                                                    @TotalPages    int out    --总页数
    with encryption 
    AS
       SET NOCOUNT ON
    
       DECLARE   @PROCEDURE_ID   INT   --存储过程编号
       SELECT    @PROCEDURE_ID = -600620000
    
    DECLARE @strSql varchar(8000)
     --定义一个存储SQL语句的变量DECLARE @recordBegin INT
    
    DECLARE @columnClause VARCHAR(1000)
    DECLARE @whereClause VARCHAR(1000)
    
    SET @RowCount = 0
    SET @TotalPages =0
    
        IF( DBO.fn_KNO_CheckFunctionRight( @AccountID,
                                               @UserID,
                                               200
                                               ) < 0)
            RETURN @PROCEDURE_ID - 100
    
    IF @PageSize <=0 or @PageIndex <0
    BEGIN
        RAISERROR ('传入的页码或每页记录数大小参数错误!', 16, 1)
        RETURN @PROCEDURE_ID - 2100
    END
    
    SET @whereClause = ' WHERE C.AccountID = '+ CONVERT( CHAR, @AccountID ) + ' AND A.status = 2 AND C.privateFlag = 0 '
    
    SET @whereClause = @whereClause + ' AND A.opTime >= '+ '''' + CONVERT( CHAR(8), @beginTime, 112 ) + ''''
    SET @whereClause = @whereClause + ' AND A.opTime <= '+ '''' + CONVERT( CHAR(8), DATEADD ( dd , 1, @endTime ), 112 ) + ''''
    IF( @key <> '' AND len( @key ) > 1 )
        BEGIN
            SELECT @whereClause=@whereClause+' AND ( charIndex('' '+@key+' '''+','' ''+A.[key]+'' '''+')>0 OR charIndex('''+@key+''',A.[title])>0 OR charIndex('''+@key+''',A.[content])>0) '
        END
    
    IF( @RowCount <= 0 )
    BEGIN
         CREATE table #rowC( 
                    rw int null
         )
    
         EXEC( 'INSERT #rowC 
                SELECT ISNULL( COUNT(*), 0 ) 
                FROM kledge AS A WITH(NOLOCK)
                   INNER JOIN dir as C with(nolock) on C.dirID = A.dirID 
                        ' + @whereClause )
        SELECT  @RowCount = rw
        FROM    #rowC
        DROP TABLE #rowC
    END
    
    IF( @RowCount IS NULL OR @RowCount=0)
         RETURN @PROCEDURE_ID - 1050
    
    SET @columnClause = ' A.kID,C.dirID,C.dirName,A.title,A.[content], A.[key], A.autoReply, convert( char(19), A.newTime, 120 ) as newTime,
                         A.way,A.hide,E.name,A.opTime '
    
    --总页数
    SET @TotalPages=CASE WHEN @RowCount%@PageSize=0 THEN  @RowCount/@PageSize ELSE @RowCount/@PageSize+1 END
    
    
    --如果是第一页,直接处理
    IF(@PageIndex=0)
    BEGIN
        SET @strSql = 'SELECT TOP '+CONVERT(VARCHAR(10),@PageSize)+' '+ @columnClause+' FROM kledge AS A WITH(NOLOCK)'
        SET @strSql = @strSql+' LEFT JOIN dir as C with(nolock) on C.dirID = A.dirID 
                                LEFT JOIN [User] as E with(nolock) on E.UserID = A.submitUserID
                                    '
        SET @strSql = @strSql+@whereClause+' ORDER BY A.opTime DESC '
    END
    ELSE
    BEGIN
        
        IF @PageIndex+1>=@TotalPages OR @PageIndex=-1 
        BEGIN
            SET @strSql='SELECT TOP '+CONVERT(VARCHAR(15),@PageSize)+' '+ @columnClause+'
            FROM (
                SELECT TOP '+CONVERT(VARCHAR(15),CASE WHEN @RowCount%@PageSize=0 THEN @PageSize ELSE @RowCount%@PageSize END ) + ' A.opTime ,A.kID
                FROM kledge AS A WITH(NOLOCK) '
                SET @strSql = @strSql+' LEFT JOIN dir as C with(nolock) on C.dirID = A.dirID  '
            SET @strSql = @strSql +@whereClause+' order by A.opTime ASC '
            SET  @strSql = @strSql +') as b LEFT JOIN kledge AS A WITH(NOLOCK) ON A.kID=B.kID 
                                    LEFT JOIN dir as C with(nolock) on C.dirID = A.dirID
                                    LEFT JOIN [User] as E with(nolock) on E.UserID = A.submitUserID 
            ORDER BY A.opTime DESC '
        END
        ELSE
        BEGIN
            --中间页(上)
            IF  @PageIndex+1<@TotalPages/2+1 AND @PageIndex+1>1
            BEGIN
                SET @strSql='
                SELECT TOP '+CONVERT(VARCHAR(15),@PageSize)+' '+ @columnClause+'
                FROM (
                    SELECT TOP '+CONVERT(VARCHAR(15),@PageSize)+' B.kID ,B.opTime
                    FROM (
                        SELECT TOP '+CONVERT(VARCHAR(15),@PageSize*(@PageIndex+1))+' A.kID,A.opTime
                        FROM kledge AS A WITH(NOLOCK) '            
    
                    SET @strSql = @strSql+' LEFT JOIN dir as C with(nolock) on C.dirID = A.dirID '
    
                SET @strSql = @strSql +@whereClause                
                SET @strSql = @strSql +' ORDER BY A.opTime DESC
                               )  AS B                        
                    ORDER BY B.opTime ASC
                           ) AS B'
                SET @strSql = @strSql+'    LEFT JOIN kledge AS A WITH(NOLOCK) ON A.kID=B.kID 
                                    LEFT JOIN dir as C with(nolock) on C.dirID = A.dirID
                                    LEFT JOIN [User] as E with(nolock) on E.UserID = A.submitUserID  
                                ORDER BY A.opTime DESC '
            END
                ELSE
            --中间页(下)
                BEGIN
                 SET @strSql='
                 SELECT TOP '+CONVERT(VARCHAR(15),@PageSize)+' '+ @columnClause+'
                 FROM (
                     SELECT TOP '+CONVERT(VARCHAR(15),@PageSize)+'B.kID ,B.opTime
    
                     FROM (             
                         SELECT TOP '+CONVERT(VARCHAR(15),@RowCount - ( @PageIndex *@PageSize) )+' A.kID, A.opTime
                         FROM kledge AS A WITH(NOLOCK) '
    
                    SET @strSql = @strSql+' LEFT JOIN dir as C with(nolock) on C.dirID = A.dirID '
                        
                 SET @strSql = @strSql +@whereClause
                 SET @strSql = @strSql +' ORDER BY A.opTime ASC
                                        )  AS B                        
                             ORDER BY B.opTime DESC 
                            ) AS B'
                 SET @strSql = @strSql+'    LEFT JOIN kledge AS A WITH(NOLOCK) ON A.kID=B.kID 
                                    LEFT JOIN dir as C with(nolock) on C.dirID = A.dirID
                                    LEFT JOIN [User] as E with(nolock) on E.UserID = A.submitUserID 
                                ORDER BY A.opTime DESC '    
                END
            END
    END
    
    --PRINT @strSql
    EXEC(@strSql)
    return @TotalPages
    go
  • 相关阅读:
    DirectX标准规定 DirectX和OpenGL的不同
    Android 抽屉效果的导航菜单实现
    Servlet基础(三) Servlet的多线程同步问题
    Java微服务之Spring Boot on Docker
    Spring Cloud 微服务架构学习笔记与示例
    从你的全世界路过—一群程序员的稻城亚丁游记
    从一个国内普通开发者的视角谈谈Sitecore
    吴军《硅谷来信》思维导图笔记
    .NET Core微服务之基于Jenkins+Docker实现持续部署(Part 1)
    2018OKR年中回顾
  • 原文地址:https://www.cnblogs.com/kaynet/p/6409336.html
Copyright © 2011-2022 走看看