• SQLServer2005 分页程序


    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go



    ALTER PROCEDURE [dbo].[DividePage]
      
    @tabname nvarchar(2000),--要查询表名
      @fidlelist nvarchar(1000),--要查询字段
      @wheresql nvarchar(1000),--查询条件
      @pk nvarchar(20),--主键
      @order nvarchar(100),--排序字段
      @pagenum int,--要查询的页号
      @rowsum int,--每页要显示的行数
      @allpage int output,--计算总页数
      @allrow int output--计算总行数
    AS
      
    declare @sqlstr nvarchar(4000),@tmpwhere nvarchar(4000),@tmporder nvarchar(100)
    BEGIN
        
    if(@order!='')
          
    begin
           
    set @tmporder=@order
          
    end 
         
    else
           
    set @tmporder=@pk;
        
    set @tmpwhere='';
        
    if(@wheresql!='')
        
    begin
           
    set @tmpwhere=' where '+@wheresql;
        
    end
        
    set @sqlstr=N'select * from(select  '+@fidlelist+', ROW_NUMBER() OVER(order by '+@tmporder+') as row from '+@tabname+@tmpwhere+') tmp where row between '+cast(((@pagenum-1)*@rowsum+1as nvarchar)+' and '+cast(@pagenum*@rowsum as nvarchar);  
    exec sp_executesql @sqlstr
        
    set @sqlstr=N'select @allrow1 =count('+@pk+') from '+ @tabname+@tmpwhere
        
    exec sp_executesql @sqlstr,N'@allrow1 int OUTPUT',@allrow1=@allrow output    
        
    if(@allrow%@rowsum<>0)
            
    begin
              
    set @allpage=@allrow/@rowsum+1--获得总页数
            end
        
    else
              
    set @allpage=@allrow/@rowsum ----获得总页数

    END

    关键的函数ROW_NUMBER() 是sqlserver 2000 中没有的。
    作者:青羽
  • 相关阅读:
    GridView中CheckBox,RadioButton并存的同时且有相互关系
    SQL重复记录查询
    TextArea的长度限定
    如何获取程序当前目录
    手机归属地查询
    如何更改ComboBox下拉列表的文字颜色
    世界上主要的一些搜索引擎
    WF/WCF/WCS/WPF/MVC/AJAX/RBAC/SOAP/SCRUM
    .Net Framework 3.5 结构图
    如何打开网页链接
  • 原文地址:https://www.cnblogs.com/tenghoo/p/676259.html
Copyright © 2020-2023  润新知