zoukankan      html  css  js  c++  java
  • 分享一个分页存储过程和分页函数

    分页存储过程

    代码
    Create PROCEDURE [dbo].[GetRecordWithPage]
    @fieldsType nvarchar(1000),   --字段列表(带类型),用于@t表变量的字段声明,如:PhotoID int,UserID int,PhotoTitle nvarchar(50)
    @fieldsList nvarchar(500),    --字段列表(不带类型),用于分页部分读取@t表变量的字段,也可使用*代替,但性能会下降,如:PhotoID ,UserID ,PhotoTitle
    @selectSrting nvarchar(2000), --向@t表变量中读取记录的Select语句
    @resultOrderBy nvarchar(200), --对分页结果进行排序的字段,如:升序'PhotoID ASC'、降序'PhotoID DESC',注意:如果是降序的话要在selectSrting和此处都加DESC
    @pageSize INT,                --页尺寸,0表示返回所有行
    @currentPage INT,             --当前页,首页为1
    @RecordCount INT OUTPUT       --非0值则返回记录总数
    AS
    BEGIN
        
    DECLARE @strSql varchar(4000)
        
    declare @sql nvarchar(1000)
        
    SET @strSql = 'DECLARE @t TABLE(' +@fieldsType+ ');'
        
    SET @strSql = @strSql + 'INSERT INTO @t '+@selectSrting+ ';'
        
    set @sql = @strSql + 'select @aa=count(*) from @t;' 
        
    exec sp_executesql @sql,N'@aa int output',@RecordCount OUTPUT;
        
    IF @pageSize=0
            
    SET @strSql=@strSql+'SELECT '+@fieldsList+' FROM @t;'
        
    ELSE
            
    IF @currentPage=1
                
    SET @strSql=@strSql+'select TOP('+STR(@pageSize)+')'+@fieldsList+' FROM @t;'
            
    ELSE
                
    BEGIN
                    
    SET @strSql =@strSql+'SELECT TOP('+Str(@pageSize)+')'+ @fieldsList+'FROM (SELECT TOP('+Str(@pageSize * @currentPage)+')'+@fieldsList+' , ROW_NUMBER() OVER (ORDER BY '+@resultOrderBy+')'
                    
    SET @strSql =@strSql+' AS RowNumber FROM @t'
                    
    SET @strSql =@strSql+') AS r WHERE r.RowNumber >' + Str(@pageSize * (@currentPage - 1))+';'
                
    END
        
    EXEC(@strSql)
    END

    分页函数:

    代码
    Create Function [dbo].[F_ConformationPage]
    (  
    @pageNum int--页码
    @pageSize int,--页面大小
    @orderExpression nvarchar(50),--排序表达式如:'ID DESC'
    @oldSql nvarchar(max--待分页的sql语句

    RETURNS  Nvarchar(max)  --待分页sql语句
     AS       
    begin
     
    declare @newSql Nvarchar(max)  
    set @newSql=''

    declare @beginPage as  nvarchar(100--开始数字
    set    @beginPage=(@pageNum*@pageSize)-(@pageSize-1)
    declare  @endPage nvarchar(100)
    set @endPage=@beginPage+@pageSize-1
    set @newSql='select * from (
    SELECT Row_Number( ) over( ORDER BY 
    '+ @orderExpression +') as rowNum,* from ('+@oldSql+') as aa) as yy
    where rowNum BETWEEN 
    '+ @beginPage+' and '+@endPage+' order by '+ @orderExpression

    return  @newSql
    end

    每天进步一点点...

  • 相关阅读:
    报错:require_once cannot allocate memory----php,以前自己弄的稍微有点特殊的开发环境
    wget下载整个网站---比较实用--比如抓取Smarty的document
    Linux必须会的命令---也是以前记录的,ctrl+z fg 啥的 jobs 比较实用
    最全的ORACLE-SQL笔记
    UML十四图打油诗记忆法
    Spring整合Hibernate总结
    MyEclipse6.5优化
    windows XP 各个文件夹详细介绍
    hibernate所需jar包
    struts2所需的jar包
  • 原文地址:https://www.cnblogs.com/cyan/p/1648043.html
Copyright © 2011-2022 走看看