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

    CREATE  PROCEDURE sp_Paging
    @tblName varchar(255) , -- 表名
    @strGetFields varchar(1000= '*'-- 需要返回的列 
    @fldName varchar(255)=''-- 排序的字段名
    @pageSize int = 10-- 页尺寸
    @pageIndex int = 1-- 页码
    @recordCount int = 0 output, -- 返回记录总数
    @pageCount int = 0 output, --分页总数
    @orderType int = 0-- 设置排序类型, 非 0 值则降序
    @strWhere varchar(1500= '' -- 查询条件 (注意: 不要加 where)
    AS
    declare @strSQL nvarchar(3000-- 主语句
    declare @strTmp varchar(110-- 临时变量
    declare @strOrder varchar(400-- 排序类型

        
    begin
            
    if @strWhere !=''
                
    set @strSQL = 'select @recordCount = count(*) from ' + @tblName + ' where '+@strWhere
            
    else
                
    set @strSQL = 'select @recordCount = count(*) from ' + @tblName
        
    end 

        
    exec sp_executesql @strSQL,N'@recordCount int out ',@recordCount out

        
    if @recordCount % @pageSize = 0
            
    set @pageCount = @recordCount / @pageSize
        
    else
            
    set @pageCount = @recordCount / @pageSize + 1
      
    --以上代码的意思是计算出记录是总数和求出总共的页数

       
    begin
          
    if @orderType != 0
             
    begin
                
    set @strTmp = '<(select min'
                
    set @strOrder = ' order by ' + @fldName +' desc'
             
    --如果@orderType不是0,就执行降序,这句很重要!
             end
          
    else
             
    begin
                
    set @strTmp = '>(select max'
                
    set @strOrder = ' order by ' + @fldName +' asc'
             
    end

         
    if @pageIndex = 1
            
    begin
               
    if @strWhere != '' 

                  
    set @strSQL = 'select top ' + str(@pageSize+' '+@strGetFields+ ' from ' + @tblName + ' where ' + @strWhere + ' ' + @strOrder
               
    else

                  
    set @strSQL = 'select top ' + str(@pageSize+' '+@strGetFields+ ' from '+ @tblName + ' '+ @strOrder
          
    --如果是第一页就执行以上代码,这样会加快执行速度
            end
         
    else
             
    begin
               
    if @strWhere != ''
                     
    set @strSQL = 'select top ' + str(@pageSize+' '+@strGetFields+ ' from '
                            
    + @tblName + ' where ' + @fldName + '' + @strTmp + '('
                            
    + substring(@fldNamecharindex('.',@fldName)+1len(@fldName)) + ') from (select top ' + str((@pageIndex-1)*@pageSize+ ' '
                            
    + @fldName + ' from ' + @tblName + ' where ' + @strWhere + ' '
                            
    + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
           
    else
             
    set @strSQL = 'select top ' + str(@pageSize+' '+@strGetFields+ ' from '
                            
    + @tblName + ' where ' + @fldName + '' + @strTmp + '('
                            
    + substring(@fldNamecharindex('.',@fldName)+1len(@fldName)) + ') from (select top ' + str((@pageIndex-1)*@pageSize+ ' '
                            
    + @fldName + '  from ' + @tblName + '' + @strOrder + ') as tblTmp)'
                            
    + @strOrder
             
    end
       
    end
    print @strSQL
    exec sp_executesql @strSQL
    GO
  • 相关阅读:
    倒计时模块(获取的是服务器上的时间——适合购物网站的抢购模块)
    javascript 双色球选号器
    最短AJAX创建代码
    poj2387 Til the Cows Come Home
    POJ2236 Wireless Network
    HDU2102 A计划
    HDU2028 Lowest Common Multiple Plus
    HDU2612 Find a way
    HDU1495 非常可乐
    UVa10603 Fill
  • 原文地址:https://www.cnblogs.com/tommyli/p/711011.html
Copyright © 2011-2022 走看看