博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Sql Server系列:查询分页语句
阅读量:5879 次
发布时间:2019-06-19

本文共 2847 字,大约阅读时间需要 9 分钟。

1 利用临时表分页

  分页存储过程:

CREATE PROCEDURE [USP_Product_GetPaged]    @WhereClause VARCHAR (2000),    @OrderBy VARCHAR (2000),    @PageIndex INT,    @PageSize INTAS    BEGIN        DECLARE @PageLowerBound INT, @PageUpperBound INT        SET @PageLowerBound = @PageSize * @PageIndex        SET @PageUpperBound = @PageLowerBound + @PageSize        CREATE TABLE #PageIndex        (            [IndexID] INT IDENTITY (1, 1) NOT NULL,            [ProductID] INT         )        DECLARE @SQL AS NVARCHAR(4000)        SET @SQL = 'INSERT INTO #PageIndex ([ProductID])'        SET @SQL = @SQL + ' SELECT'        IF @PageSize > 0            SET @SQL = @SQL + ' TOP ' + CONVERT(NVARCHAR, @PageUpperBound)        SET @SQL = @SQL + ' [ProductID]'        SET @SQL = @SQL + ' FROM [dbo].[Product]'        IF LEN(@WhereClause) > 0            SET @SQL = @SQL + ' WHERE ' + @WhereClause        IF LEN(@OrderBy) > 0            SET @SQL = @SQL + ' ORDER BY ' + @OrderBy        EXEC (@SQL)        SELECT            TempTable.[ProductID],             TempTable.[ProductCode],             TempTable.[ProductName],             TempTable.[CategoryID],             TempTable.[UnitPrice]        FROM            [dbo].[Product] TempTable        INNER JOIN            #PageIndex PageIndex        ON            TempTable.[ProductID] = PageIndex.[ProductID]        WHERE            PageIndex.IndexID > @PageLowerBound        AND            PageIndex.IndexID <= @PageUpperBound        ORDER BY            PageIndex.IndexID        SET @SQL = 'SELECT COUNT(*) AS TotalRowCount'        SET @SQL = @SQL + ' FROM [dbo].[Product]'        IF LEN(@WhereClause) > 0            SET @SQL = @SQL + ' WHERE ' + @WhereClause        EXEC (@SQL)    ENDGO

  执行分页存储过程示例:

-- 不带Where子句EXECUTE [USP_Product_GetPaged] '', '[ProductID] ASC', 0, 10EXECUTE [USP_Product_GetPaged] '', '[ProductID] ASC', 1, 10-- Where子句EXECUTE [USP_Product_GetPaged] '[UnitPrice] > 20', '[UnitPrice] DESC', 0, 10EXECUTE [USP_Product_GetPaged] '[UnitPrice] > 20', '[UnitPrice] DESC', 1, 10

2 利用ROW_NUMBER()分页

  ROW_NUMBER()函数是SQL Server 2005新增的排名函数,可以使用ROW_NUMBER()进行分页。

SELECT TOP (10)     [t].[ProductID] AS [ProductID],     [t].[ProductName] AS [ProductName]FROM (    SELECT        [ProductID] AS [ProductID],        [ProductName] AS [ProductName],        ROW_NUMBER() OVER (ORDER BY [ProductID] ASC) AS [row_number]    FROM [dbo].[Product]    WHERE [UnitPrice] > 20)  AS [t]WHERE [t].[row_number] > 10ORDER BY [t].[ProductID] ASC

3 利用OFFSET...FETCH分页

  OFFSET...FETCH是在SQL Server 2012中新增的实现分页方式,OFFSET向SELECT查询表明跳过多少行,FETCH表明从特定的位置开始检索多少行。

  示例:

SELECT [ProductID],[CategoryID],[ProductCode],[ProductName],[UnitPrice]FROM [dbo].[Product]ORDER BY [ProductID]OFFSET 10 ROWSFETCH NEXT 10 ROWS ONLY

  使用OFFSET...FETCH限制:

  ◊ 使用OFFSET...FETCH子句必须同时使用ORDER BY。

  ◊ 可以单独使用OFFSET,但不能单独使用FETCH。

  ◊ 不可以同时使用SELECT TOP 和 OFFSET...FETCH。

转载地址:http://gbdix.baihongyu.com/

你可能感兴趣的文章
Redis 通用操作2
查看>>
11. Spring Boot JPA 连接数据库
查看>>
洛谷P2925 [USACO08DEC]干草出售Hay For Sale
查看>>
MapReduce工作原理流程简介
查看>>
那些年追过的......写过的技术博客
查看>>
小米手机解锁bootload教程及常见问题
查看>>
Python内置函数property()使用实例
查看>>
Spring MVC NoClassDefFoundError 问题的解决方法。
查看>>
CentOS 6.9配置网卡IP/网关/DNS命令详细介绍及一些常用网络配置命令(转)
查看>>
python基础教程_学习笔记19:标准库:一些最爱——集合、堆和双端队列
查看>>
C# 解决窗体闪烁
查看>>
CSS魔法堂:Transition就这么好玩
查看>>
【OpenStack】network相关知识学习
查看>>
centos 7下独立的python 2.7环境安装
查看>>
[日常] 算法-单链表的创建
查看>>
前端工程化系列[01]-Bower包管理工具的使用
查看>>
使用 maven 自动将源码打包并发布
查看>>
Spark:求出分组内的TopN
查看>>
Python爬取豆瓣《复仇者联盟3》评论并生成乖萌的格鲁特
查看>>
关于跨DB增量(增、改)同步两张表的数据小技巧
查看>>