zoukankan      html  css  js  c++  java
  • 子查询分页

    分页的sql脚本是2013年大实训的时候老师讲的,今天把它整理出来。

    数据库就用Northwind数据库。就用Orders表为例子吧,假设每页都显示10条记录。

    先从简单的脚本开始吧。先取到第一页的数据。

    SELECT TOP 10 * FROM dbo.Orders

    第二页的数据

    SELECT TOP 10 * FROM dbo.Orders WHERE OrderID NOT IN (SELECT TOP 10 OrderID FROM dbo.Orders)

    第三页的数据

    SELECT TOP 10 * FROM dbo.Orders WHERE OrderID NOT IN (SELECT TOP 20 OrderID FROM dbo.Orders)

     由此可以推断出,第N页的数据为

    SELECT TOP 10 * FROM dbo.Orders WHERE OrderID NOT IN (SELECT TOP (N-1)*10 OrderID FROM dbo.Orders)

    写成通用的SQL语句如下:

    BEGIN
        DECLARE @PageSize INT   --每页显示条数
        DECLARE @PageIndex INT    --页码(从1开始)
        SET @PageSize = 10
        SET @PageIndex = 4
        SELECT TOP ( @PageSize )
                *
        FROM    dbo.Orders
        WHERE   OrderID NOT IN ( SELECT TOP ( ( @PageIndex - 1 ) * @PageSize )
                                        OrderID
                                 FROM   dbo.Orders
                                 ORDER BY OrderID ASC )
        ORDER BY OrderID ASC
    END

    写成存储过程如下:

    --存储过程
    CREATE PROCEDURE P_GetPagedOrders1
        @PageSize INT ,             --每页显示条数
        @PageIndex INT ,            --页码(从1开始)
        @RecordCount INT OUTPUT ,    --数据总数
        @PageCount INT OUTPUT        --总页数
    AS
        BEGIN
            --获取数据总数
            SELECT  @RecordCount = COUNT(1)
            FROM    dbo.Orders
            --计算总页数
            SET @PageCount = @RecordCount / @PageSize
            IF @RecordCount % @PageSize > 0
                BEGIN
                    SET @PageCount = @PageCount + 1
                END
            --获取当前页的数据
            SELECT TOP ( @PageSize )
                    *
            FROM    dbo.Orders
            WHERE   OrderID NOT IN ( SELECT TOP ( ( @PageIndex - 1 ) * @PageSize )
                                            OrderID
                                     FROM   dbo.Orders
                                     ORDER BY OrderID ASC )
            ORDER BY OrderID ASC
        END

    测试存储过程

    DECLARE @RecordCount INT ,
            @PageCount INT
    
    EXEC dbo.P_GetPagedOrders1
            @PageSize = 10, 
            @PageIndex = 1,
            @RecordCount = @RecordCount OUTPUT, 
            @PageCount = @PageCount OUTPUT
    
    SELECT  @RecordCount AS N'@RecordCount' ,
            @PageCount AS N'@PageCount'


    测试结果如下

  • 相关阅读:
    Android学习笔记事件处理机制 希
    DIY我的博客皮肤 希
    CSS学习小札居中问题及解决方案 希
    Entity Framework 教程
    springcahce集成redis 设置过期时间 Hiro
    springboot集成springcache Hiro
    Geotools核心特点以及支持数据的格式和标准
    github使用
    一个jekyll使用大牛的博客
    在没有root权限情况下安装python
  • 原文地址:https://www.cnblogs.com/jackylovewendy/p/4460405.html
Copyright © 2011-2022 走看看