• 数据库分页存储过程(7)


    /*
    ******************************************************************************************
      过程名称:Common_ColumnType_Pagination
      过程功能:
      代码设计:小朱(zsy619@163.com)
      设计时间:2005-11-3 13:58:26
    ******************************************************************************************
      功能描述:

    ******************************************************************************************
      如果您修改了我的程序,请留下修改记录,以便对程序进行维护,谢谢  !!!
    ==========================================================================================
      修改人            修改时间                修改原因
    ------------------------------------------------------------------------------------------

    ==========================================================================================

    ******************************************************************************************
      备注:对指定表中满足条件的记录按指定列进行分页查询,分页可以顺序、倒序         
        查询可以指定页大小、指定查询任意页、指定输出字段列表,返回总页数
    *****************************************************************************************
    */

    Create Procedure [dbo].[Common_ColumnType_Pagination]
        
    @tb         varchar(50), --表名  
        @col        varchar(50), --按该列来进行分页  
        @coltype    int,         --@col列的类型,0-数字类型,1-字符类型,2-日期时间类型  
        @orderby    bit,         --排序,0-顺序,1-倒序  
        @collist    varchar(800),--要查询出的字段列表,*表示全部字段  
        @pagesize   int,         --每页记录数  
        @page       int,         --指定页  
        @condition  varchar(800),--查询条件  
        @pages      int OUTPUT   --总页数
    AS
        
    Declare @intResult Int
        
    Begin Tran
        
    -----------------------------------------------------------------代码设计--------------------------------------------------------------------
        DECLARE @sql nvarchar(4000),@where1 varchar(800),@where2 varchar(800)
        
    IF @condition is null or rtrim(@condition)=''
        
    BEGIN--没有查询条件  
            SET @where1=' WHERE ' 
            
    SET @where2='  '
        
    END
        
    ELSE
        
    BEGIN--有查询条件  
            SET @where1=' WHERE ('+@condition+') AND '--本来有条件再加上此条件  
            SET @where2=' WHERE ('+@condition+''--原本没有条件而加上此条件
        END
        
    SET @sql='SELECT @pages=CEILING((COUNT(*)+0.0)/'+CAST(@pagesize AS varchar)+ ') FROM '+@tb+@where2
        
    EXEC sp_executesql @sql,N'@pages int OUTPUT',@pages OUTPUT--计算总页数
        IF @orderby=0  
            
    SET @sql='SELECT TOP '+CAST(@pagesize AS varchar)+' '+@collist+ ' FROM '+@tb+@where1+@col+'>(SELECT MAX('+@col+''+  ' FROM (SELECT TOP '+CAST(@pagesize*(@page-1AS varchar)+' '+          
             
    @col+' FROM '+@tb+@where2+'ORDER BY '+@col+') t) ORDER BY '+@col
        
    ELSE  
            
    SET @sql='SELECT TOP '+CAST(@pagesize AS varchar)+' '+@collist+' FROM '+@tb+@where1+@col+'<(SELECT MIN('+@col+''+ ' FROM (SELECT TOP '+CAST(@pagesize*(@page-1AS varchar)+' '+ 
            
    @col+' FROM '+@tb+@where2+'ORDER BY '+@col+' DESC) t) ORDER BY '+@col+' DESC'
        
    IF @page=1--第一页 
            SET @sql='SELECT TOP '+CAST(@pagesize AS varchar)+' '+@collist+' FROM '+@tb+    
                
    @where2+'ORDER BY '+@col+CASE @orderby WHEN 0 THEN '' ELSE ' DESC' END
        
    EXEC(@sql)
        
    Set @intResult = @@ROWCOUNT
        
    ----------------------------------------------------------------------------------------------------------------------------------------------------
        If @@Error <> 0
        
    Begin
            
    RollBack Tran
            
    Return -1
        
    End
        
    Else
        
    Begin
            
    Commit Tran
            
    Return @intResult
        
    End
    GO
  • 相关阅读:
    swiftlint升级
    collectionView初始化
    UITabBarController加载之后不显示sub view controller
    非常不错的博客收藏!!!!
    C#静态类 静态方法与非静态方法比较
    C#中抽象方法与虚方法的区别
    C#中的反射
    C#中的访问修饰符
    可以使用foreach遍历循环的条件
    Http协议三次握手过程
  • 原文地址:https://www.cnblogs.com/zsy/p/311247.html
Copyright © 2020-2023  润新知