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

     1 create proc proc_page(
     2 @tableName varchar(50),--要进行分页的表名
     3 @columnFilds varchar(500),--要查询的列,默认是*,查询所有的列
     4 @whereStr varchar(500),--查询条件,不带where 关键字
     5 @pKcol varchar(50),--主键列
     6 @sortType int,--排序类型,0顺序,1倒叙
     7 @pageSize int ,--每页的显示数量,即分页大小
     8 @pageNow int, --当前页码
     9 @countRecord int output,--表的总记录数
    10 @pageCount int output--总页数,总页数 = 总记录数
    11 )
    12 as
    13     declare @sqlCount nvarchar(500) --获取总记录数、总页数的sql语句
    14     declare @sqlstr varchar(8000)--获取分页信息的SQL语句
    15     declare @sortstr varchar(50)--排序语句,如' order by id asc'
    16 begin
    17     if (@sortType=0) set @sortstr = ' order by '+ @pKcol +' asc ' --如果排序类型等于0就代表是升序
    18     if (@sortType=1) set @sortstr = ' order by '+ @pKcol +' desc '--否则就是降序
    19     
    20     begin
    21     
    22      set @sqlCount= N'select @countRecord=count(['+@pKcol+']),@pageCount= CEILING(count('+@pKcol+')*1.0/'+cast(@pageSize as varchar(10))+')from '+@tableName+@whereStr
    23      print @sqlCount
    24      exec SP_EXECUTESQL @sqlCount,N'@countRecord int output,@pageCount int output',@countRecord output,@pageCount output
    25      --这里面的关键点是执行时用到的SP_EXECUTESQL函数,注意在使用该函数的时候,前面的@sqlCount一定要申明为ntext/nchar/nvarchar中的其中一种,一般都是nvarchar,使用的时候(例如上面的set @sqlCount)
        最好在前面加一个N(表示字符串用 Unicode 方式存储,Nvarchar的意思),24行的第一个@countRecord是指22行的动态sql内的参数,第二个@countRecord是动态sql内参数列表提供值的外部参数列表,对应存储过程里面的
       表的总记录数
    26 end 27 28 begin 29 set nocount on 30 if(@pageNow<2)--查询第1页 31 set @sqlstr='select top '+cast(@pageSize as varchar(10))+' '+@columnFilds+' from '+ @tableName +@whereStr+@sortstr 32 else--查询第2页以后的其他页 33 begin 34 set @sqlstr='select top '+cast(@pageSize as varchar(10))+' '+@columnFilds+' from '+ @tableName +' where '+@pKcol+' > ( 35 select max('+@pKcol+') from (select top '+cast(@pageSize*(@pageNow-1) as varchar(10))+' '+@pKcol+' from '+@tableName+@sortstr+' ) as temptable 36 )'+@sortstr 37 end 38 set nocount off 39 print @sqlstr--打印出当前的sql 40 exec (@sqlstr)--执行sql 41 end 42 43 end 44 45 --调用存储过程 46 declare @countRecord int,@pageCount int 47 exec proc_page 'teststudents_1','*',' ','id',0,10,5,@countRecord output,@pageCount output 48 select @countRecord,@pageCount 49 50 --删除存储过程 51 --drop proc proc_page

     

  • 相关阅读:
    【472】proceedings 改投 journals
    【471】Keras 深度神经网络实现
    iOS websocket接入的简单使用
    Windows下安装gazebo
    详解ROS文件系统
    /home/qian/anaconda3/lib/libpng16.so.16: undefined reference to `inflateValidate@ZLIB_1.2.9'
    /usr/lib/*** is not a symbolic link问题解决
    SC_leGO_LOAM安装使用
    3D激光slam开源框架汇总
    PCL——(10)PCL中使用随机采样一致性模型
  • 原文地址:https://www.cnblogs.com/programsky/p/4605686.html
Copyright © 2011-2022 走看看