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

     

  • 相关阅读:
    【Spring】 AOP Base
    【Offer】[20] 【表示数值的字符串】
    【Offer】[19] 【字符串匹配】
    【设计模式】代理模式
    【LeetCode】[0002] 【两数之和】
    【Offer】[18-1] 【在O(1)时间内删除链表节点】
    【Offer】[18-2] 【删除链表中重复的节点】
    【Offer】[17] 【打印1到最大的n位数】
    【Offer】[16] 【数值的整数次方】
    python_内置函数
  • 原文地址:https://www.cnblogs.com/programsky/p/4605686.html
Copyright © 2011-2022 走看看