sp_cursorfetch(Transact-SQL)

적용 대상:SQL Server

데이터베이스에서 하나 이상의 행 버퍼를 인출합니다. 이 버퍼의 행 그룹을 커서의 페치 버퍼라고 합니다. sp_cursorfetch TDS(테이블 형식 데이터 스트림) 패킷에서 ID = 7을 지정하여 호출됩니다.

Transact-SQL 구문 표기 규칙

구문

  
sp_cursorfetch cursor  
    [ , fetchtype[ , rownum [ , nrows] ]]   

인수

cursor
SQL Server에서 생성되고 sp_cursoropen 반환되는 핸들 값입니다. 커서는 int 입력 값을 호출하는 필수 매개 변수입니다. 자세한 내용은 이 항목의 뒷부분에 있는 설명 섹션을 참조하세요.

fetchtype
가져올 커서 버퍼를 지정합니다. fetchtype 은 다음 정수 입력 값 중 하나가 필요한 선택적 매개 변수입니다.

입력 설명
0x0001 FIRST nrows 행의 첫 번째 버퍼를 가져옵니다. nrow가 0이면 결과 집합 앞에 커서가 배치되고 행이 반환되지 않습니다.
0x0002 NEXT nrows 행의 다음 버퍼를 가져옵니다.
0x0004 이전 nrows 행의 이전 버퍼를 가져옵니다.

참고: FORWARD_ONLY 커서에 PREV를 사용하면 FORWARD_ONLY 한 방향으로만 스크롤할 수 있으므로 오류 메시지가 반환됩니다.
0x0008 LAST nrows 행의 마지막 버퍼를 가져옵니다. nrow가 0이면 결과 집합 뒤에 커서가 배치되고 행이 반환되지 않습니다.

참고: FORWARD_ONLY 커서에 LAST를 사용하면 FORWARD_ONLY 한 방향으로만 스크롤할 수 있으므로 오류 메시지가 반환됩니다.
0x10 절대 rownum 행으로 시작하는 nrows 행의 버퍼를 가져옵니다.

참고: DYNAMIC 커서 또는 FORWARD_ONLY 커서에 ABSOLUTE를 사용하면 FORWARD_ONLY 한 방향으로만 스크롤할 수 있으므로 오류 메시지가 반환됩니다.
0x20 상대 현재 블록의 첫 번째 행에서 행의 rownum 값으로 지정된 행으로 시작하는 nrows 행의 버퍼를 가져옵니다. 이 경우 rownum 은 음수일 수 있습니다.

참고: FORWARD_ONLY 커서에 RELATIVE를 사용하면 FORWARD_ONLY 한 방향으로만 스크롤할 수 있으므로 오류 메시지가 반환됩니다.
0x80 REFRESH 기본 테이블에서 버퍼를 다시 채우면 됩니다.
0x100 INFO 커서에 대한 정보를 검색합니다. 이 정보는 rownum 및 nrows 매개 변수를 사용하여 반환됩니다. 따라서 INFO를 지정 하면 rownumnrow가 출력 매개 변수가 됩니다.
0x200 PREV_NOADJUST PREV와 같이 사용됩니다. 그러나 결과 집합의 맨 위가 조기에 발견되면 결과가 달라질 수 있습니다.
0x400 SKIP_UPDT_CNCY INFO를 제외한 다른 fetchtype 값 중 하나와 함께 사용해야 합니다.

참고 항목

0x40 값에 대한 지원은 없습니다.

자세한 내용은 이 항목의 뒷부분에 있는 설명 섹션을 참조하세요.

rownum
입력 또는 출력 또는 둘 다에 정수 값만 사용하여 ABSOLUTE 및 INFO 페치타입 값의 행 위치를 지정하는 데 사용되는 선택적 매개 변수입니다. rownum은 fetchtype 비트 값 RELATIVE의 행 오프셋 역할을 합니다. rownum 은 다른 모든 값에 대해 무시됩니다. 자세한 내용은 이 항목의 뒷부분에 있는 설명 섹션을 참조하세요.

nrows
인출할 행 수를 지정하는 데 사용되는 선택적 매개 변수입니다. nrows를 지정하지 않으면 기본값은 20행입니다. 데이터를 반환하지 않고 위치를 설정하려면 0 값을 지정합니다. nrows가 fetchtype INFO 쿼리에 적용되면 해당 쿼리의 총 행 수를 반환합니다.

참고 항목

nrow는 REFRESH fetchtype 비트 값에 의해 무시됩니다.

자세한 내용은 이 항목의 뒷부분에 있는 설명 섹션을 참조하세요.

반환 코드 값

BIT 값 INFO를 지정하면 반환될 수 있는 값이 다음 표에 표시됩니다.

참고 항목

: 반환되는 행이 없으면 버퍼 내용이 그대로 유지됩니다.

<rownum> 다음으로 설정
열려 있지 않은 경우 0
결과 집합 앞에 배치되는 경우 0
결과 집합 뒤의 위치에 있는 경우 -1
KEYSET 및 STATIC 커서의 경우 결과 집합에서 현재 위치의 절대 행 번호입니다.
DYNAMIC 커서의 경우 6
ABSOLUTE의 경우 -1은 집합의 마지막 행을 반환합니다.

-2는 집합에서 마지막 행까지의 두 번째 행을 반환합니다.

참고: 이 경우 둘 이상의 행을 페치하도록 요청하면 결과 집합의 마지막 두 행이 반환됩니다.
<nrows> 다음으로 설정
열려 있지 않은 경우 0
KEYSET 및 STATIC 커서의 경우 일반적으로 현재 키 집합 크기입니다.

-m 커서가 비동기 생성 중이면 m 행이 이 지점까지 찾습니다.
DYNAMIC 커서의 경우 -1

설명

cursor 매개 변수

가져오기 작업이 있기 전에 커서의 기본 위치는 결과 집합의 첫 번째 행 앞에 있습니다.

fetchtype 매개 변수

SKIP_UPD_CNCY 제외하고 fetchtype 값은 상호 배타적입니다.

SKIP_UPDT_CNCY를 지정하면 행을 인출하거나 새로 고칠 때 타임스탬프 열 값이 키 집합 테이블에 기록되지 않습니다. 키 집합 행이 업데이트되는 경우 타임스탬프 열의 값은 이전 값으로 유지됩니다. 키 집합 행을 삽입하는 경우 타임스탬프 열의 값이 정의되지 않습니다.

KEYSET 커서의 경우 이는 키 집합 테이블의 값이 건너뛰지 않는 마지막 FETCH(수행하는 경우) 중에 설정됨을 의미하며, 그렇지 않은 경우 채우기 중에 설정된 값이 있습니다.

DYNAMIC 커서의 경우 이는 새로 고침과 함께 건너뛰기를 수행하는 경우 KEYSET과 같은 결과가 생성됨을 의미합니다. 다른 인출 형식의 경우 키 집합 테이블이 잘립니다. 즉, 행이 삽입되고 타임스탬프 열의 값이 정의되지 않습니다. 따라서 동적 커서에 대한 sp_cursorfetch 실행할 때 새로 고침 이외의 작업에는 SKIP_UPDT_CNCY 사용하지 마십시오.

요청한 커서 위치가 결과 집합을 벗어나서 인출 작업이 실패하는 경우에는 커서 위치가 마지막 행 바로 다음으로 설정됩니다. 요청된 커서 위치가 결과 집합 앞에 배치되어 페치 작업이 실패하면 커서 위치가 첫 번째 행 앞에 설정됩니다.

rownum 매개 변수

rownum을 사용하면 지정된 행부터 버퍼가 채워집니다.

fetchtype 값 ABSOLUTE는 전체 결과 집합 내의 rownum 위치를 나타냅니다. ABSOLUTE가 있는 음수는 작업에서 결과 집합의 끝에서 행 수를 계산하도록 지정합니다.

fetchtype 값 RELATIVE는 현재 버퍼의 시작 부분에 있는 커서 위치와 관련하여 rownum의 위치를 나타냅니다. RELATIVE가 있는 음수는 커서가 현재 커서 위치에서 뒤로 이동되도록 지정합니다.

nrows 매개 변수

fetchtype 값 REFRESH 및 INFO는 이 매개 변수를 무시합니다.

nrow 값이 0인 FIRST의 fetchtype 값을 지정하면 페치 버퍼에 행이 없는 결과 집합 앞에 커서가 배치됩니다.

nrow 값이 0인 LAST의 fetchtype 값을 지정하면 현재 페치 버퍼에 행이 없는 결과 집합 뒤에 커서가 배치됩니다.

NEXT, PREV, ABSOLUTE, RELATIVE 및 PREV_NOADJUST fetchtype 값의 경우 nrow 값이 0이 아닌 경우

RPC 고려 사항

RPC 반환 상태는 키 집합 크기 매개 변수가 최종인지 여부, 즉 키 집합 또는 임시 테이블이 비동기적으로 채워지는 경우를 나타냅니다.

RPC 상태 매개 변수는 다음 표에 표시된 값 중 하나로 설정됩니다.

설명
0 프로시저가 성공적으로 실행되었습니다.
0x0001 프로시저가 실패했습니다.
0x0002 페치가 결과 앞에 논리적으로 있었던 경우 음수 방향의 페치로 인해 커서 위치가 결과 집합의 시작 부분으로 설정되었습니다.
0x10 빠른 전달 커서가 자동으로 닫혔습니다.

행은 열 형식(0x2a), 행(0xd1), 완료(0xfd) 등의 일반적인 결과 집합으로 반환됩니다. 메타데이터 토큰은 sql Server 7.0 사용자에 대한 0x81, 0xa5 및 0xa4 등 sp_cursoropen 지정된 형식으로 전송됩니다. 행 상태 표시기가 각 행의 끝에 열 이름 rowstat 및 데이터 형식 INT4가 있는 BROWSE 모드와 유사한 숨겨진 열로 전송됩니다. 이 rowstat 열에는 다음 표에 표시된 값 중 하나가 있습니다.

설명
0x0001 FETCH_SUCCEEDED
0x0002 FETCH_MISSING

TDS 프로토콜은 이전 열을 보내지 않고 후행 상태 열을 보낼 수 있는 방법을 제공하지 않으므로 누락된 행에 대해 더미 데이터가 전송됩니다(null 허용 필드는 null로 설정되고 고정 길이 필드는 0으로 설정되거나 비어 있거나 해당 열의 기본값으로 설정됨).

DONE 행 수는 항상 0입니다. DONE 메시지에는 실제 결과 집합 행 개수가 포함되며 TDS 메시지 사이에 오류 또는 정보 메시지가 나타날 수 있습니다.

커서의 선택 목록에 대한 메타데이터를 TDS 스트림에 반환하도록 요청하려면 RPC RETURN_METADATA 입력 플래그를 1로 설정합니다.

A. PREV를 사용하여 커서 위치 변경

커서 h2에서 다음과 같은 내용이 현재 위치에 있는 결과 집합을 생성한다고 가정합니다.

row 1 contents      
row 2 contents  
row 3 contents  
row 4 contents  <-- current position  
row 5 contents   
row 6 contents  

다음으로, nrows 값이 5인 sp_cursorfetch PREV는 결과 집합의 첫 번째 행 앞에 커서 두 행을 논리적으로 배치합니다. 이러한 경우 커서는 첫 번째 행에서 시작하고 요청된 행 수를 반환하도록 조정됩니다. 이는 PRIOR 인출 버퍼에 있던 행을 반환하는 경우가 많습니다.

참고 항목

RPC 상태 매개 변수가 2로 설정된 정확한 경우입니다.

B. PREV_NOADJUST를 사용하여 PREV보다 적은 행 수 반환

PREV_NOADJUST 반환되는 행 블록의 현재 커서 위치 또는 뒤에 있는 행을 포함하지 않습니다. PREV가 현재 위치 뒤의 행을 반환하는 경우 PREV_NOADJUST nrows에서 요청된 것보다 적은 행을 반환합니다. 이전 예제 A의 현재 위치를 감안할 때 PREV가 적용되면 sp_cursorfetch(h2, 4, 1, 5)는 다음 행을 가져옵니다.

row1 contents   
row2 contents  
row3 contents  
row4 contents  
row5 contents  

그러나 PREV_NOADJUST 적용되면 sp_cursorfetch(h2, 512, 6, 5)는 다음 행만 가져옵니다.

row1 contents   
row2 contents  
row3 contents   

참고 항목

sp_cursoropen(Transact-SQL)
시스템 저장 프로시저(Transact-SQL)