다음을 통해 공유


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 PREV nrows 행의 이전 버퍼를 가져옵니다.

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

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

참고: 커서나 FORWARD_ONLY 커서에 DYNAMIC 사용하면 ABSOLUTE 한 방향으로만 스크롤할 수 있으므로 FORWARD_ONLY 오류 메시지가 반환됩니다.
0x20 RELATIVE 현재 블록의 첫 번째 행에서 행의 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 fetchtype 값의 행 위치를 지정하는 데 사용되는 선택적 매개 변수입니다. rownum은 fetchtype 비트 값에 대한 행 오프셋 역할을 합니다RELATIVE. rownum 은 다른 모든 값에 대해 무시됩니다. 자세한 내용은 설명 섹션을 참조하세요.

nrows

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

nrow는 fetchtype 비트 값에 REFRESH 의해 무시됩니다. 자세한 내용은 설명 섹션을 참조하세요.

반환 코드 값

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

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

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

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

참고: 이 경우 가져오기를 위해 둘 이상의 행이 요청되면 결과 집합의 마지막 두 행이 반환됩니다.
<nrows> 다음으로 설정
열려 있지 않은 경우 0
For KEYSETSTATIC cursors 일반적으로 현재 키 집합 크기입니다.

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

설명

커서 매개 변수

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

fetchtype 매개 변수

제외하면 SKIP_UPD_CNCYfetchtype 값은 함께 사용할 수 없습니다.

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

커서의 경우 KEYSET 키 집합 테이블에 마지막 비스칩 FETCH동안 설정된 값(수행된 경우)이 있음을 의미합니다. 그렇지 않은 경우 채우기 중에 설정된 값입니다.

커서의 경우 DYNAMIC 이는 새로 고침을 사용하여 건너뛰기를 수행하는 경우와 동일한 결과를 KEYSET생성한다는 것을 의미합니다. 다른 인출 형식의 경우 키 집합 테이블이 잘립니다. 즉, 행이 삽입되고 타임스탬프 열의 값이 정의되지 않습니다. 따라서 커서에 대해 실행할 때는 SKIP_UPDT_CNCY REFRESH.sp_cursorfetch DYNAMIC

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

rownum 매개 변수

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

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

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

nrows 매개 변수

fetchtypeREFRESH 이며 INFO 이 매개 변수를 무시합니다.

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

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

, PREV, ABSOLUTERELATIVEPREV_NOADJUSTnrow 값의 NEXTfetchtype 값이 0 잘못되었습니다.

RPC 고려 사항

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

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

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

행은 열 형식(), 행0xd1(0x2a), ()와 같은 DONE0xfd일반적인 결과 집합으로 반환됩니다. 메타데이터 토큰은 SQL Server 사용자에 대해 sp_cursoropen0x810xa5 지정된 형식과 0xa4 동일한 형식으로 전송됩니다. 행 상태 표시기가 각 행의 끝에 열 이름 rowstat 및 데이터 형식 int가 있는 모드와 유사한 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

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

참고 항목

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

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

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

row1 contents
row2 contents
row3 contents
row4 contents
row5 contents

그러나 적용 sp_cursorfetch (h2, 512, 6, 5) 된 경우 PREV_NOADJUST 다음 행만 가져옵니다.

row1 contents
row2 contents
row3 contents