OFFSET 및 FETCH
테스트 환경
- 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
|
인수
OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS } offset_row_count_expression은 변수, 매개 변수 또는 상수 스칼라 하위 쿼리일 수 있습니다. 하위 쿼리를 사용하는 경우 외부 쿼리 범위에 정의된 열을 참조할 수 없습니다. 즉, 외부 쿼리와 상관 관계를 만들 수 없습니다. ROW와 ROWS는 ANSI 호환성을 위해 제공되는 동의어입니다. 쿼리 실행 계획에서 오프셋 행 개수 값은 TOP 쿼리 연산자의 Offset 특성에 표시됩니다. FETCH { FIRST | NEXT } { integer_constant | fetch_row_count_expression } { ROW | ROWS } ONLY fetch_row_count_expression은 변수, 매개 변수 또는 상수 스칼라 하위 쿼리일 수 있습니다. 하위 쿼리를 사용하는 경우 외부 쿼리 범위에 정의된 열을 참조할 수 없습니다. 즉, 외부 쿼리와 상관 관계를 만들 수 없습니다. FIRST와 NEXT는 ANSI 호환성을 위해 제공되는 동의어입니다. ROW와 ROWS는 ANSI 호환성을 위해 제공되는 동의어입니다. 쿼리 실행 계획에서 오프셋 행 개수 값은 TOP 쿼리 연산자의 Rows 또는 Top 특성에 표시됩니다. |
예제
-- 정수 상수를 사용하여 OFFSET 및 FETCH 값 지정 -- Skip the first 5 rows from the sorted result set and return all remaining rows. -- Skip 0 rows and return only the first 10 rows from the sorted result set. |
-- 변수를 사용하여 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; |