ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • OFFSET 및 FETCH
    SQLServer 2020. 1. 13. 16:36

    테스트 환경

     - OS : Windows 2008 R2 DataCenter

     - DBMS : SQL Server 2012 Enterprise Edition + SP4

     - 참고문서 : https://docs.microsoft.com/ko-kr/previous-versions/sql/sql-server-2012/ms188385(v=sql.110)

     

    내용

     

    개요

     

    행의 수를 제한 할 경우 보통 TOP 키워드를 사용했습니다.

    SQL Server 2012 부티 새롭게 지원되는 OFFSET 및 FETCH 를 사용하여 행 수 제한이 가능하다.

    MS 에서는 OFFSET 및 FETCH 를 사용하여 행 수 제한하는 것을 권장합니다.


    TOP 절 대신 OFFSET 및 FETCH 절을 사용하여 쿼리 페이징 솔루션을 구현하고 클라이언트 응용 프로그램으로 보내는 행 수를 제한하는 것이 좋습니다.

     

     

    구문

    ORDER BY order_by_expression
    [ COLLATE collation_name ]
    [ ASC | DESC ]
    [ ,...n ]
    [ ]


    ::=
    {
    OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS }
    [
    FETCH { FIRST | NEXT } {integer_constant | fetch_row_count_expression } { ROW | ROWS } ONLY
    ]
    }

     

    인수

    OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS }
    쿼리 식에서 행을 반환하기 전에 건너뛸 행 수를 지정합니다. 값은 0보다 크거나 같은 정수 상수 또는 식일 수 있습니다.

    offset_row_count_expression은 변수, 매개 변수 또는 상수 스칼라 하위 쿼리일 수 있습니다. 하위 쿼리를 사용하는 경우 외부 쿼리 범위에 정의된 열을 참조할 수 없습니다. 즉, 외부 쿼리와 상관 관계를 만들 수 없습니다.

    ROW와 ROWS는 ANSI 호환성을 위해 제공되는 동의어입니다.

    쿼리 실행 계획에서 오프셋 행 개수 값은 TOP 쿼리 연산자의 Offset 특성에 표시됩니다.



    FETCH { FIRST | NEXT } { integer_constant | fetch_row_count_expression } { ROW | ROWS } ONLY
    OFFSET 절을 처리한 후에 반환할 행 수를 지정합니다. 값은 1보다 크거나 같은 정수 상수 또는 식일 수 있습니다.

    fetch_row_count_expression은 변수, 매개 변수 또는 상수 스칼라 하위 쿼리일 수 있습니다. 하위 쿼리를 사용하는 경우 외부 쿼리 범위에 정의된 열을 참조할 수 없습니다. 즉, 외부 쿼리와 상관 관계를 만들 수 없습니다.

    FIRST와 NEXT는 ANSI 호환성을 위해 제공되는 동의어입니다.

    ROW와 ROWS는 ANSI 호환성을 위해 제공되는 동의어입니다.

    쿼리 실행 계획에서 오프셋 행 개수 값은 TOP 쿼리 연산자의 Rows 또는 Top 특성에 표시됩니다.

     

    예제

     

    -- 정수 상수를 사용하여 OFFSET 및 FETCH 값 지정

    USE AdventureWorks2012;
    GO
    -- Return all rows sorted by the column DepartmentID.
    SELECT DepartmentID, Name, GroupName
    FROM HumanResources.Department
    ORDER BY DepartmentID;

    -- Skip the first 5 rows from the sorted result set and return all remaining rows.
    SELECT DepartmentID, Name, GroupName
    FROM HumanResources.Department
    ORDER BY DepartmentID OFFSET 5 ROWS;

    -- Skip 0 rows and return only the first 10 rows from the sorted result set.
    SELECT DepartmentID, Name, GroupName
    FROM HumanResources.Department
    ORDER BY DepartmentID
    OFFSET 0 ROWS
    FETCH NEXT 10 ROWS ONLY;

     

    -- 변수를 사용하여 OFFSET 및 FETCH 값 지정

    USE AdventureWorks2012;
    GO
    -- Specifying variables for OFFSET and FETCH values
    DECLARE @StartingRowNumber tinyint = 1
    , @FetchRows tinyint = 8;
    SELECT DepartmentID, Name, GroupName
    FROM HumanResources.Department
    ORDER BY DepartmentID ASC
    OFFSET @StartingRowNumber ROWS
    FETCH NEXT @FetchRows ROWS ONLY;

    'SQLServer' 카테고리의 다른 글

    필터링된 인덱스  (0) 2020.01.14
    SQL Server 2012 에서 지원하는 기본 함수  (0) 2020.01.13
    OUTPUT (데이터 변경 분 저장하기)  (0) 2020.01.13
    MERGE문  (0) 2020.01.13
    CTE (공통 테이블 식)  (0) 2020.01.13
Designed by Tistory.