>데이터 베이스 >MySQL 튜토리얼 >OFFSET 및 FETCH NEXT와 이전 버전의 대안을 사용하여 SQL Server에서 쿼리 페이징을 구현하는 방법은 무엇입니까?

OFFSET 및 FETCH NEXT와 이전 버전의 대안을 사용하여 SQL Server에서 쿼리 페이징을 구현하는 방법은 무엇입니까?

DDD
DDD원래의
2025-01-10 20:57:41483검색

How to Implement Query Paging in SQL Server Using OFFSET and FETCH NEXT, and Alternatives for Older Versions?

SQL의 OFFSET 및 FETCH NEXT를 사용하여 페이징 쿼리 구현(SQL Server 2012 이상)

이 예에서는 가장 최근에 논의된 포럼 게시물을 검색하기 위해 쿼리에 페이지 매김을 추가하는 방법을 보여줍니다. 목표는 결과를 지정된 행 범위(예: "항목 10~20")로 제한하는 것입니다.

SQL Server 2012에서는 페이징 구현을 단순화하기 위해 OFFSET 및 FETCH NEXT 키워드를 도입했습니다.

<code class="language-sql">SELECT col1, col2, ...
FROM ...
WHERE ...
ORDER BY -- 必须包含 ORDER BY 语句
-- 分页语句
OFFSET 10 ROWS -- 跳过 10 行
FETCH NEXT 10 ROWS ONLY; -- 获取 10 行</code>

원래 쿼리 수정:

<code class="language-sql">SELECT PostId
FROM
(
    SELECT PostId, MAX(Datemade) AS LastDate
    FROM dbForumEntry
    GROUP BY PostId
) AS SubQueryAlias
ORDER BY LastDate DESC
OFFSET 10 ROWS -- 跳过 10 行
FETCH NEXT 10 ROWS ONLY; -- 获取 10 行</code>

SQL Server 2008 및 이전 버전의 페이지 매김

SQL Server 2012 이전 버전에서는 ROW_NUMBER() 및 COUNT() 함수를 하위 쿼리와 함께 사용하여 페이징을 구현할 수 있습니다. 예시는 다음과 같습니다.

<code class="language-sql">DECLARE @Start INT
DECLARE @End INT
SELECT @Start = 10, @End = 20;

WITH PostCTE AS
(
    SELECT PostId, MAX(Datemade) AS LastDate
    ,ROW_NUMBER() OVER (ORDER BY PostId) AS RowNumber
    FROM dbForumEntry
    GROUP BY PostId
)
SELECT PostId, LastDate
FROM PostCTE
WHERE RowNumber BETWEEN @Start AND @End;</code>

@Start 및 @End 변수를 조정하여 원하는 페이지 범위를 지정할 수 있습니다.

위 내용은 OFFSET 및 FETCH NEXT와 이전 버전의 대안을 사용하여 SQL Server에서 쿼리 페이징을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.