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

    CREATE PROC [dbo].[PAGETEST]
    @pagesize int,         --每页显示记录数
    @currentpage int,      --当前页
    @datastatus int,
    @IsValid int,
    @rowcount int output, --总记录数
    @pagecount int output --总页数
    AS
    select
    @rowcount=COUNT(*)
    from dbo.Task
    where DataStatus=@datastatus and IsValid=@IsValid

    if @rowcount%@pagesize>0
    set @pagecount=(@rowcount/@pagesize)+1
    else set @pagecount=@rowcount/@pagesize

    BEGIN
    select * 
    from
    (
    select
    ROWNUM=ROW_NUMBER() OVER (ORDER BY ID),
    ID,
    Subject,
    Status,
    IsValid
    from dbo.CPF_Task
    where DataStatus=@datastatus
     and (@IsValid is null or @IsValid =-1 or @IsValid =IsValid) 
    )
    as T
    where T.ROWNUM BETWEEN (@currentpage*@pagesize+1)AND(@currentpage*@pagesize+@pagesize)
     END

    说明:总页数和总记录数是需要输出的参数,在声明时要加上output。ROW_NUMBER()函数是SQL2005中新增的一个函数,它通常被用在分页的SQL语句中。可以理解为函数可以为表中的某个字段建立从1开始的序列。或者这样理解,这个函数根据给定的字段建立了一个新的,从1开始的数据列。from 后面的语句是将括号中select 查到的数据集暂时命名为T,然后根据这个数据集的新列和传入的当前页索引和页码大小的运算取到当前页面应该显示的记录集合。 这里还要注意括号中where条件的写法,DataStatus=@datastatus  and (@IsValid is null or @IsValid =-1 or @IsValid =IsValid) 。当存储过程中有条件查询时,例如要以主题、状态、时间、作者来查询记录时,四个条件可以自由组合查询,此时可采用(@condition is null or @condition is "" or @condition =condition)and (...)的方式来实现。

  • 相关阅读:
    初学网络编程
    Python模块(三)(正则,re,模块与包)
    Python模块(二)(序列化)
    idea2020.2安装与破解
    部署-jenkins发布项目到linux环境
    部署-jenkins发布项目到windows环境
    部署-jenkins与gitlab结合使用
    部署-docker推送镜像到远程仓库
    部署-gitlab克隆地址踩坑
    部署-docker安装jenkins
  • 原文地址:https://www.cnblogs.com/xuezhi/p/2782869.html
Copyright © 2011-2022 走看看