FETCH(Transact-SQL)

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은 정수 상수여야 하며 @nvarsmallint, tinyint 또는 int여야 합니다.
  • RELATIVE { n | **@**nvar}
    n 또는 @nvar가 양수인 경우에는 현재 행에서부터 n 번째 행에 있는 행을 반환하며 반환되는 행을 새 현재 행으로 만듭니다. n 또는 @nvar가 음수인 경우에는 현재 행에서부터 앞으로 n 번째 행에 있는 행을 반환하며 반환되는 행을 새 현재 행으로 만듭니다. n 또는 @nvar가 0인 경우에는 현재 행을 반환합니다. n이나 @nvar가 음수로 설정되거나 첫 번째 인출에 있는 0이 커서에 대해 수행되도록 FETCH RELATIVE가 지정된 경우 행이 반환되지 않습니다. n은 정수 상수여야 하며 @nvarsmallint, tinyint 또는 int여야 합니다.
  • GLOBAL
    cursor_name이 전역 커서를 참조하도록 지정합니다.
  • cursor_name
    인출이 수행되는 열린 커서의 이름입니다. 동일한 cursor_name을 가진 전역 커서와 지역 커서가 있는 경우 GLOBAL이 지정되면 cursor_name에 전역 커서를 사용하고 GLOBAL이 지정되지 않으면 지역 커서를 사용합니다.
  • @cursor_variable_name
    수행할 인출에서 열린 커서를 참조하는 커서 변수의 이름입니다.
  • INTO @variable_name[ ,...n]
    인출하는 열에서 지역 변수로 데이터를 가져가도록 허용합니다. 목록의 각 변수는 왼쪽에서 오른쪽 순으로 커서 결과 집합의 해당 열과 연관됩니다. 각 변수의 데이터 형식은 반드시 해당 결과 집합 열의 데이터 형식과 일치하거나 암시적 변환이 지원되어야 합니다. 변수의 개수는 커서 선택 목록의 열 수와 일치해야 합니다.

주의

SQL-92 스타일 DECLARE CURSOR 문에서 SCROLL 옵션을 지정하지 않는 경우 유일하게 지원되는 FETCH 옵션은 NEXT입니다. SQL-92 스타일 DECLARE CURSOR커서에서 SCROLL을 지정하면 모든 FETCH 옵션이 지원됩니다.

Transact-SQL DECLARE 커서 확장을 사용하는 경우에는 다음 규칙이 적용됩니다.

  • FORWARD_ONLY나 FAST_FORWARD를 지정한 경우에는 유일하게 지원되는 FETCH 옵션이 NEXT입니다.
  • DYNAMIC, FORWARD_ONLY 또는 FAST_FORWARD를 지정하지 않고 KEYSET, STATIC 또는 SCROLL 중 하나를 지정한 경우에는 모든 FETCH 옵션이 지원됩니다.
  • DYNAMIC SCROLL 커서는 ABSOLUTE를 제외한 모든 FETCH 옵션을 지원합니다.

@@FETCH_STATUS 함수는 마지막 FETCH 문의 상태를 보고합니다. sp_describe_cursor에 의해 반환되는 커서의 fetch_status 열에도 동일한 정보가 기록됩니다. 해당 데이터에 대해 어떠한 작업을 수행하려고 시도하기 전에 반드시 이 상태 정보를 사용하여 FETCH 문이 반환하는 데이터의 유효성을 확인해야 합니다. 자세한 내용은 @@FETCH_STATUS를 참조하십시오.

사용 권한

FETCH 사용 권한은 모든 유효한 사용자에게 기본적으로 부여됩니다.

1. 단순 커서에서 FETCH 사용

다음 예에서는 Person.Contact 테이블에 있는 행에 대해 성이 B로 시작하는 단순 커서를 선언하고 FETCH NEXT를 사용해 한 행씩 진행하는 방법을 보여 줍니다. FETCH 문은 DECLARE CURSOR에서 정의된 열에 대한 값을 단일 행 결과 집합으로 반환합니다.

USE AdventureWorks
GO
DECLARE contact_cursor CURSOR FOR
SELECT LastName FROM Person.Contact
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

2. FETCH를 사용하여 변수에 값 저장

다음 예는 FETCH 문의 출력이 클라이언트에게 직접 반환되지 않고 지역 변수에 저장된다는 점 외에는 앞의 예와 유사합니다. PRINT 문은 변수를 한 문자열로 결합하여 클라이언트에 반환합니다.

USE AdventureWorks
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.Contact
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

3. SCROLL 커서 선언 및 기타 FETCH 옵션 사용

다음 예에서는 SCROLL 커서를 만들어 LAST, PRIOR, RELATIVE, ABSOLUTE 옵션 전체에 스크롤 기능을 허용하는 방법을 보여 줍니다.

USE AdventureWorks
GO
-- Execute the SELECT statement alone to show the 
-- full result set that is used by the cursor.
SELECT LastName, FirstName FROM Person.Contact
ORDER BY LastName, FirstName

-- Declare the cursor.
DECLARE contact_cursor SCROLL CURSOR FOR
SELECT LastName, FirstName FROM Person.Contact
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)

관련 자료

Transact-SQL 커서

도움말 및 정보

SQL Server 2005 지원 받기