FETCH(Transact-SQL)
적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance
Transact-SQL 서버 커서에서 특정 행을 검색합니다.
구문
FETCH
[ [ NEXT | PRIOR | FIRST | LAST
| ABSOLUTE { n | @nvar }
| RELATIVE { n | @nvar }
]
FROM
]
{ { [ GLOBAL ] cursor_name } | @cursor_variable_name }
[ INTO @variable_name [ ,...n ] ]
인수
NEXT
현재 행 바로 다음의 결과 행을 반환하며 현재 행을 반환되는 행 앞의 행으로 만듭니다. 커서에 대해 FETCH NEXT
가 첫 번째 인출인 경우 결과 집합의 첫 번째 행을 반환합니다. NEXT
는 커서 인출의 기본 옵션입니다.
PRIOR
현재 행 바로 앞의 결과 행을 반환하며 현재 행을 반환되는 행 뒤의 행으로 만듭니다. 커서에 대해 FETCH PRIOR
가 첫 번째 인출인 경우 행이 반환되지 않으며 커서는 첫 번째 행 앞에 위치하게 됩니다.
FIRST
커서의 첫 번째 행을 반환하며 그 행을 현재 행으로 만듭니다.
LAST
커서의 마지막 행을 반환하며 그 행을 현재 행으로 만듭니다.
ABSOLUTE { n| @nvar}
n 또는 @nvar가 양수인 경우 커서 맨 앞에서 n번째 행을 반환하며 반환되는 행을 새 현재 행으로 만듭니다. n 또는 @nvar가 음수인 경우에는 커서 맨 뒤에서 n번째 행을 반환하며 반환되는 행을 새 현재 행으로 만듭니다. n 또는 @nvar가 0이면 행이 반환되지 않습니다. n은 정수 상수여야 하며 @nvar는 smallint, tinyint 또는 int이어야 합니다.
RELATIVE { n| @nvar}
n 또는 @nvar이 양수인 경우에는 현재 행에서 위로 n번째 행을 반환하며 반환되는 행을 새 현재 행으로 만듭니다. n 또는 @nvar이 음수인 경우에는 현재 행에서 앞으로 n번째 행을 반환하며 반환되는 행을 새 현재 행으로 만듭니다. n 또는 @nvar가 0인 경우에는 현재 행을 반환합니다. n 또는 @nvar가 음수로 설정되거나 첫 번째 인출에 있는 0이 커서에 대해 수행되도록 FETCH RELATIVE
가 지정된 경우 행은 반환되지 않습니다. n은 정수 상수여야 하며 @nvar는 smallint, tinyint 또는 int이어야 합니다.
GLOBAL
cursor_name이 전역 커서를 참조하도록 지정합니다.
cursor_name
인출이 수행되는 열린 커서의 이름입니다. 동일한 cursor_name을 가진 전역 커서와 지역 커서가 있을 경우 GLOBAL이 지정되면 cursor_name은 전역 커서를 참조하고 GLOBAL이 지정되지 않으면 지역 커서를 참조합니다.
@cursor_variable_name
수행할 인출에서 열린 커서를 참조하는 커서 변수의 이름입니다.
INTO @variable_name[ ,...n]
인출하는 열에서 지역 변수로 데이터를 가져가도록 허용합니다. 목록의 각 변수는 왼쪽에서 오른쪽 순으로 커서 결과 집합의 해당 열과 연관됩니다. 각 변수의 데이터 형식은 반드시 해당 결과 집합 열의 데이터 형식과 일치하거나 암시적 변환이 지원되어야 합니다. 변수의 개수는 커서 선택 목록의 열 수와 일치해야 합니다.
설명
SCROLL
옵션이 ISO 스타일 DECLARE CURSOR
문에서 지정되지 않은 경우 NEXT
가 유일하게 지원되는 FETCH
옵션입니다. SCROLL
이 ISO 스타일 DECLARE CURSOR
문에서 지정되는 경우 모든 FETCH
옵션이 지원됩니다.
Transact-SQL DECLARE 커서 확장을 사용하는 경우에는 다음 규칙이 적용됩니다.
FORWARD_ONLY
또는FAST_FORWARD
를 지정하면NEXT
가 유일하게 지원되는FETCH
옵션입니다.DYNAMIC
,FORWARD_ONLY
또는FAST_FORWARD
를 지정하지 않고KEYSET
,STATIC
또는SCROLL
중 하나를 지정하는 경우 모든FETCH
옵션이 지원됩니다.DYNAMIC SCROLL
커서는ABSOLUTE
를 제외한 모든FETCH
옵션을 지원합니다.
@@FETCH_STATUS
함수는 마지막 FETCH
문의 상태를 보고합니다. sp_describe_cursor에 의해 반환되는 커서의 fetch_status 열에도 동일한 정보가 기록됩니다. 해당 데이터에 대해 어떠한 작업을 수행하려고 시도하기 전에 반드시 이 상태 정보를 사용하여 FETCH
문에서 반환되는 데이터의 유효성을 확인해야 합니다. 자세한 내용은 @@FETCH_STATUS(Transact-SQL)를 참조하세요.
사용 권한
FETCH
권한은 기본적으로 모든 유효한 사용자에게 부여됩니다.
예제
A. 단순 커서에서 FETCH 사용
다음 예에서는 Person.Person
테이블에 있는 행에 대해 성이 B
로 시작하는 단순 커서를 선언하고 FETCH NEXT
를 사용하여 한 행씩 진행하는 방법을 보여 줍니다. FETCH
문은 DECLARE CURSOR
에 지정된 열에 대한 값을 단일 행 결과 집합으로 반환합니다.
USE AdventureWorks2022;
GO
DECLARE contact_cursor CURSOR FOR
SELECT LastName FROM Person.Person
WHERE LastName LIKE 'B%'
ORDER BY LastName;
OPEN contact_cursor;
-- Perform the first fetch.
FETCH NEXT FROM contact_cursor;
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
-- This is executed as long as the previous fetch succeeds.
FETCH NEXT FROM contact_cursor;
END
CLOSE contact_cursor;
DEALLOCATE contact_cursor;
GO
B. FETCH를 사용하여 변수에 값 저장
다음 예는 FETCH
문의 출력이 클라이언트에게 직접 반환되지 않고 지역 변수에 저장된다는 점 외에는 예 1과 유사합니다. PRINT
문은 변수를 한 문자열로 결합하여 클라이언트에 반환합니다.
USE AdventureWorks2022;
GO
-- Declare the variables to store the values returned by FETCH.
DECLARE @LastName VARCHAR(50), @FirstName VARCHAR(50);
DECLARE contact_cursor CURSOR FOR
SELECT LastName, FirstName FROM Person.Person
WHERE LastName LIKE 'B%'
ORDER BY LastName, FirstName;
OPEN contact_cursor;
-- Perform the first fetch and store the values in variables.
-- Note: The variables are in the same order as the columns
-- in the SELECT statement.
FETCH NEXT FROM contact_cursor
INTO @LastName, @FirstName;
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
-- Concatenate and display the current values in the variables.
PRINT 'Contact Name: ' + @FirstName + ' ' + @LastName
-- This is executed as long as the previous fetch succeeds.
FETCH NEXT FROM contact_cursor
INTO @LastName, @FirstName;
END
CLOSE contact_cursor;
DEALLOCATE contact_cursor;
GO
C. SCROLL 커서 선언 및 기타 FETCH 옵션 사용
다음 예에서는 SCROLL
커서를 만들어 LAST
, PRIOR
, RELATIVE
및 ABSOLUTE
옵션 전체에 스크롤 기능을 허용하는 방법을 보여 줍니다.
USE AdventureWorks2022;
GO
-- Execute the SELECT statement alone to show the
-- full result set that is used by the cursor.
SELECT LastName, FirstName FROM Person.Person
ORDER BY LastName, FirstName;
-- Declare the cursor.
DECLARE contact_cursor SCROLL CURSOR FOR
SELECT LastName, FirstName FROM Person.Person
ORDER BY LastName, FirstName;
OPEN contact_cursor;
-- Fetch the last row in the cursor.
FETCH LAST FROM contact_cursor;
-- Fetch the row immediately prior to the current row in the cursor.
FETCH PRIOR FROM contact_cursor;
-- Fetch the second row in the cursor.
FETCH ABSOLUTE 2 FROM contact_cursor;
-- Fetch the row that is three rows after the current row.
FETCH RELATIVE 3 FROM contact_cursor;
-- Fetch the row that is two rows prior to the current row.
FETCH RELATIVE -2 FROM contact_cursor;
CLOSE contact_cursor;
DEALLOCATE contact_cursor;
GO
참고 항목
CLOSE(Transact-SQL)
DEALLOCATE(Transact-SQL)
DECLARE CURSOR(Transact-SQL)
OPEN(Transact-SQL)