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)
  • 相关阅读:
    iOS:UIToolBar、toolbarItems、BarButtonItem的几种关系
    iOS:UIToolBar控件的使用
    iOS:制作九宫格
    iOS:转载:UIControl的使用
    iOS:UIPickerView选择器的使用
    iOS:NSDate的主要几种时间形式
    iOS:步进UIStepper、滑动块UISlider、开关UISwitch的基本使用
    iOS:NSBundle的具体介绍
    h264码流分析及其工具
    零基础学习视频解码之FFMpeg中比较重要的函数以及数据结构
  • 原文地址:https://www.cnblogs.com/yangbin1005/p/1156980.html
Copyright © 2011-2022 走看看