Sql server 分页查询语句

首次发布:2025-03-17

表结构

CREATE TABLE [dbo].[F](
	[Id] [bigint] NOT NULL,
	[Title] [varchar](250) NOT NULL,
	[Introduce] [text] NULL,
 CONSTRAINT [PK_F] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

分页查询方式一(OFFSET - FETCH 子句是 SQL Server 2012 及以上版本支持的较为简洁的分页方式)

-- 定义页码和每页记录数的参数
DECLARE @PageNumber INT = 1;
DECLARE @PageSize INT = 10;

-- 执行分页查询
SELECT 
    [Id],
    [Title],
    [Introduce]
FROM 
    [dbo].[F]
ORDER BY 
    [Id] ASC
OFFSET (@PageNumber - 1) * @PageSize ROWS
FETCH NEXT @PageSize ROWS ONLY;

分页查询方式二

-- 定义页码和每页记录数的参数
DECLARE @PageNumber INT = 1;
DECLARE @PageSize INT = 10;

-- 使用 CTE 结合 ROW_NUMBER() 函数进行分页查询
WITH PaginatedData AS (
    SELECT 
        [Id],
        [Title],
        [Introduce],
        ROW_NUMBER() OVER (ORDER BY [Id] ASC) AS RowNum
    FROM 
        [dbo].[F]
)
SELECT 
    [Id],
    [Title],
    [Introduce]
FROM 
    PaginatedData
WHERE 
    RowNum BETWEEN ((@PageNumber - 1) * @PageSize + 1) AND (@PageNumber * @PageSize);

本文来自 www.luofenming.com