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

    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go


    CREATE   PROCEDURE [dbo].[page_proc]
      
    @selectstr varchar(2048),     --所取字段
      @tbname   varchar(50),        --所查询的表的名称
      @querystr  varchar(2048),     --查询条件
      @pkey  varchar(50),           --主键(排序段)
      @ordertype bit=1,             --排序规则 0:升序,1:降序
      @pagesize int,                --每页数量
      @page    int output,          --指定返回页
      @rscount int  output,         --返回总数
      @pagecount int output         --返回总页数
    as 
      
    declare @sqlstr  nvarchar(2048)
      
    declare @sqlcount nvarchar(2048)
      
    declare @l_order varchar(255)
      
    declare @l_compare varchar(255)
      
    declare @l_tquery varchar(2048)
      
    declare @l_query varchar(2048)

     
    /*指定数据返回开始*/
      
    if @ordertype=1    --降序
          begin
            
    set @l_order='desc'
            
    set @l_compare=@pkey+'<(SELECT MIN('+@pkey+')'
          
    end
       
    else             --升序
          begin
            
    set @l_order=''
            
    set @l_compare=@pkey+'>(SELECT MAX('+@pkey+')'
          
    end

      
    if @querystr is null or rtrim(@querystr)='' 
          
    begin
             
    set @l_tquery=''
             
    set @l_query=''
          
    end
      
    else
          
    begin
             
    set @l_tquery='where ('+@querystr+')'
             
    set @l_query='and ('+@querystr+')'
          
    end
      
    set nocount on

     
    /*计算返回数据总数和页数*/
      
    set @sqlcount='select @rscount=count('+@pkey+') from '+@tbname+' '+@l_tquery
      
    exec sp_executesql @sqlcount,N'@rscount int OUTPUT',@rscount output
      
    set @pagecount=ceiling(@rscount/cast(@pagesize as float))
      
    if @page>@pagecount
        
    set @page=@pagecount
      
    if @page<1
        
    set @page=1
     
    /*页数计算结束*/  

      
    if @page>1
        
    set @sqlstr='select top '+cast(@pagesize as varchar)+' '+@selectstr+' from '+@tbname+' where '+@l_compare+' from (select top '+cast(@pagesize*(@page-1as varchar)+' '+@Pkey+' from '+@tbname+' '+@l_tquery+' order by '+@Pkey+' '+@l_order+') as tb) '+@l_query+' order by '+@pkey+' '+@l_order
      
    else
        
    set @sqlstr='select top '+cast(@pagesize as varchar)+' '+@selectstr+' from '+@tbname+' '+@l_tquery+' order by '+@pkey+' '+@l_order
     
    exec(@sqlstr)
     
    set nocount off
  • 相关阅读:
    一起谈.NET技术,浅析ASP.NET清空缓存时遇到的问题 狼人:
    一起谈.NET技术,.NET平台上的ModelViewPresenter模式实践 狼人:
    一起谈.NET技术,.Net下的分布式缓存从Discuz!NT的缓存设计谈起 狼人:
    一起谈.NET技术,.NET缓存机制探讨与比对 狼人:
    一起谈.NET技术,.Net下的分布式缓存(2)实现分布式缓存同步的手段 狼人:
    一起谈.NET技术,.Net下的分布式缓存(3)如果我们没有缓存会怎么样 狼人:
    newlisp的lambda表达式
    SQL Server2008登录记录怎么删除?
    线段树端点更新 poj 2828 Buy Tickets
    111 History Grading
  • 原文地址:https://www.cnblogs.com/cancer_xu/p/1606815.html
Copyright © 2011-2022 走看看