zoukankan      html  css  js  c++  java
  • 分页存储过程(两个)

    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go

    ALTER Procedure [dbo].[Proc_splitPage]
    @TableName varchar(50),        --表名
    @Fields varchar(5000= '*',    --字段名(全部字段为*)
    @OrderField varchar(5000),        --排序字段(必须!支持多字段)
    @sqlWhere varchar(5000= Null,--条件语句(不用加where)
    @pageSize int,                    --每页多少条记录
    @pageIndex int = 1 ,            --指定当前为第几页
    @TotalPage int output            --返回总页数 
    as
    begin

        
    Begin Tran --开始事务

        
    Declare @sql nvarchar(4000);
        
    Declare @totalRecord int;    

        
    --计算总记录数
             
        
    if (@SqlWhere='' or @sqlWhere=NULL)
            
    set @sql = 'select @totalRecord = count(*) from ' + @TableName
        
    else
            
    set @sql = 'select @totalRecord = count(*) from ' + @TableName + ' where ' + @sqlWhere

        
    EXEC sp_executesql @sql,N'@totalRecord int OUTPUT',@totalRecord OUTPUT--计算总记录数        
        
        
    --计算总页数
        select @TotalPage=CEILING((@totalRecord+0.0)/@PageSize)

        
    if (@SqlWhere='' or @sqlWhere=NULL)
            
    set @sql = 'Select * FROM (select ROW_NUMBER() Over(order by ' + @OrderField + ') as rowId,' + @Fields + ' from ' + @TableName 
        
    else
            
    set @sql = 'Select * FROM (select ROW_NUMBER() Over(order by ' + @OrderField + ') as rowId,' + @Fields + ' from ' + @TableName + ' where ' + @SqlWhere    
            
        
        
    --处理页数超出范围情况
        if @PageIndex<=0 
            
    Set @pageIndex = 1
        
        
    if @pageIndex>@TotalPage
            
    Set @pageIndex = @TotalPage

         
    --处理开始点和结束点
        Declare @StartRecord int
        
    Declare @EndRecord int
        
        
    set @StartRecord = (@pageIndex-1)*@PageSize + 1
        
    set @EndRecord = @StartRecord + @pageSize - 1

        
    --继续合成sql语句
        set @Sql = @Sql + ') as ' + @TableName + ' where rowId between ' + Convert(varchar(50),@StartRecord+ ' and ' +  Convert(varchar(50),@EndRecord)

        
    Exec(@Sql)
        
    ---------------------------------------------------
        If @@Error <> 0
          
    Begin
            
    RollBack Tran
            
    Return -1
          
    End
         
    Else
          
    Begin
            
    Commit Tran
            
    Return @totalRecord ---返回记录总数
          End    
    end


    -------------------------------------------------------------------------------------------

    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go

    ALTER PROCEDURE [dbo].[GetRecordByPage]
         
    @tblName       varchar(255),       -- 表名
         @fldName       varchar(255),       -- 主键字段名
         @selectContent VARCHAR(255),  --查询的列名,为空则查询所有列
         @PageSize     int,     -- 页尺寸
         @PageIndex     int,             -- 页码
         @IsReCount     bit,             -- 返回记录总数, 非 0 值则返回
         @OrderType     bit,             -- 设置排序类型, 非 0 值则降序
         @strWhere     varchar(1000)   -- 查询条件 (注意: 不要加 where)
    AS

    declare @strSQL   varchar(6000)       -- 主语句
    declare @strTmp   varchar(100)         -- 临时变量
    declare @strOrder varchar(400)         -- 排序类型

    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+' ' + @selectContent +'  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 @IsReCount != 0
         
    set @strSQL = 'select count(*) as Total from [' + @tblName + ']'+' where ' + @strWhere

    exec (@strSQL)
  • 相关阅读:
    进程池,线程池,协程,gevent模块,协程实现单线程服务端与多线程客户端通信,IO模型
    线程相关 GIL queue event 死锁与递归锁 信号量l
    生产者消费者模型 线程相关
    进程的开启方式 进程的join方法 进程间的内存隔离 其他相关方法 守护进程 互斥锁
    udp协议 及相关 利用tcp上传文件 socketserver服务
    socket套接字 tcp协议下的粘包处理
    常用模块的完善 random shutil shevle 三流 logging
    day 29 元类
    Django入门
    MySQL多表查询
  • 原文地址:https://www.cnblogs.com/yangbin1005/p/1156980.html
Copyright © 2011-2022 走看看