在 MSSQL(SQL Server)中,分页查询的 SQL 语句可以使用 OFFSET
和 FETCH NEXT
,或者 ROW_NUMBER()
方式来实现。
方法 1:使用 OFFSET ... FETCH NEXT
(适用于 SQL Server 2012 及以上)
SELECT * FROM TableName ORDER BY ColumnName OFFSET (@PageIndex - 1) * @PageSize ROWS FETCH NEXT @PageSize ROWS ONLY;
说明
@PageIndex
:当前页码(从 1 开始)。@PageSize
:每页显示的记录数。ORDER BY ColumnName
:必须有ORDER BY
,否则OFFSET
不能使用。
方法 2:使用 ROW_NUMBER()
(适用于 SQL Server 2005 及以上)
WITH CTE AS (SELECT *, ROW_NUMBER() OVER (ORDER BY ColumnName) AS RowNumFROM TableName ) SELECT * FROM CTE WHERE RowNum BETWEEN (@PageIndex - 1) * @PageSize + 1 AND @PageIndex * @PageSize;
xcoder使用的是这个方法