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

          varchar(255),       -- 表名
        @fldName      varchar(255),       -- 字段名
        @PageSize     int = 10,           -- 页尺寸
        @PageIndex    int = 1,            -- 页码
        @IsCount      bit = 0,            -- 返回记录总数, 非 0 值则返回
        @OrderType    bit = 0,            -- 设置排序类型, 非 0 值则降序
        @strWhere     varchar(5000= ''  -- 查询条件 (注意: 不要加 where)
    AS

    /**********************************
    Author:xuty
    date:20070706
    descript:解密exec sp_decrypt 'GetRecordFromPage'
        GetRecordFromPage得到

    Date:2007-07-06
    @strWhere:最多只能存3500字节,不然系统可能会出错
        
    *********************************
    */

    declare @strSQL   varchar(7999)       -- 主语句
    declare @strTmp   varchar(5000)        -- 临时变量
    declare @strOrder varchar(400)        -- 排序类型
    declare @counts  int
    declare @strPageNum nvarchar(4000
    declare @PageNum int

    if @OrderType != 0
    begin
        
    set @strTmp = '<(select min'
        
    set @strOrder = ' order by [' + @fldName +'] desc'
    end
    else
    begin
        
    set @strTmp = '>(select max'
        
    set @strOrder = ' order by [' + @fldName +'] asc'
    end

    set @strSQL = 'select top ' + str(@PageSize+ ' * from ['
        
    + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
        
    + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize+ ' ['
        
    + @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'
        
    + @strOrder

    if @strWhere != ''
        
    set @strSQL = 'select top ' + str(@PageSize+ ' * from ['
            
    + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
            
    + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize+ ' ['
            
    + @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '
            
    + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
    --
    if @PageIndex = 1
    begin
        
    set @strTmp = ''
        
    if @strWhere != ''
            
    set @strTmp = ' where ' + @strWhere

        
    set @strSQL = 'select top ' + str(@PageSize+ ' * from ['
            
    + @tblName + ']' + @strTmp + ' ' + @strOrder
    end

    if @IsCount != 0
        
    set @strSQL = 'select count(*) as Total from [' + @tblName + ']'

    if @strWhere != ''
    begin
           
    set @strPageNum = 'select @counts=count(*) from [' + @tblName + ']' + ' where '+@strWhere
    end 
    else
    begin
        
    set @strPageNum = 'select @counts=count(*) from [' + @tblName + ']' 
    end

    exec sp_executesql @strPageNum,N'@Counts int out ',@Counts out
    if @Counts <= @pageSize    set @PageNum = 1
    else    
    set @PageNum = (@Counts / @pageSize+ 1

    exec (@strSQL)
    select @PageNum
    GO
    转载请注明出处[http://samlin.cnblogs.com/

    欢迎关注本人公众号:

    作者赞赏
  • 相关阅读:
    slf4j + log4j 记录日志
    Executors介绍
    Java集合(JDK1.6.0_45)
    Java多线程系列目录(共43篇)
    线程池体系
    FutureTask
    23种设计模式分类
    结构型 之 适配器模式
    信号量Semaphore详解以及应用
    Excel格式转化工具
  • 原文地址:https://www.cnblogs.com/samlin/p/1074952.html
Copyright © 2011-2022 走看看