sp_cursorfetch(Transact-SQL)
적용 대상: SQL Server
데이터베이스에서 하나 이상의 행 버퍼를 인출합니다. 이 버퍼의 행 그룹을 커서의 페치 버퍼라고 합니다. sp_cursorfetch
는 TDS(테이블 형식 데이터 스트림) 패킷을 지정하여 ID = 7
호출됩니다.
구문
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 지정 되면 rownum 및 nrow가 출력 매개 변수가 됩니다. |
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 KEYSET 및 STATIC cursors |
결과 집합에서 현재 위치의 절대 행 번호입니다. |
커서의 경우 DYNAMIC |
1 |
때문에 ABSOLUTE |
-1은 집합의 마지막 행을 반환합니다. -2는 집합에서 마지막 행까지의 두 번째 행을 반환합니다. 참고: 이 경우 가져오기를 위해 둘 이상의 행이 요청되면 결과 집합의 마지막 두 행이 반환됩니다. |
<nrows> |
다음으로 설정 |
---|---|
열려 있지 않은 경우 | 0 |
For KEYSET 및 STATIC cursors |
일반적으로 현재 키 집합 크기입니다.-m 커서가 비동기 생성 중이면 m 행이 이 지점까지 찾습니다. |
커서의 경우 DYNAMIC |
-1 |
설명
커서 매개 변수
인출 작업 전에 커서의 기본 위치는 결과 집합의 첫 번째 행 앞에 있습니다.
fetchtype 매개 변수
제외하면 SKIP_UPD_CNCY
fetchtype 값은 함께 사용할 수 없습니다.
SKIP_UPDT_CNCY
지정하면 행을 가져오거나 새로 고칠 때 타임스탬프 열 값이 키 집합 테이블에 기록되지 않습니다. 키 집합 행이 업데이트되는 경우 타임스탬프 열의 값은 이전 값으로 유지됩니다. 키 집합 행을 삽입하는 경우 타임스탬프 열의 값이 정의되지 않습니다.
커서의 경우 KEYSET
키 집합 테이블에 마지막 비스칩 FETCH
동안 설정된 값(수행된 경우)이 있음을 의미합니다. 그렇지 않은 경우 채우기 중에 설정된 값입니다.
커서의 경우 DYNAMIC
이는 새로 고침을 사용하여 건너뛰기를 수행하는 경우와 동일한 결과를 KEYSET
생성한다는 것을 의미합니다. 다른 인출 형식의 경우 키 집합 테이블이 잘립니다. 즉, 행이 삽입되고 타임스탬프 열의 값이 정의되지 않습니다. 따라서 커서에 대해 실행할 때는 SKIP_UPDT_CNCY
REFRESH
.sp_cursorfetch
DYNAMIC
요청한 커서 위치가 결과 집합을 벗어나서 인출 작업이 실패하는 경우에는 커서 위치가 마지막 행 바로 다음으로 설정됩니다. 요청된 커서 위치가 결과 집합 앞에 배치되어 페치 작업이 실패하면 커서 위치가 첫 번째 행 앞에 설정됩니다.
rownum 매개 변수
rownum을 사용하면 지정된 행부터 버퍼가 채워집니다.
fetchtype 값 ABSOLUTE
은 전체 결과 집합 내의 rownum 위치를 나타냅니다. 음수는 ABSOLUTE
작업이 결과 집합의 끝에서 행 수를 계산하도록 지정합니다.
fetchtype 값은 현재 버퍼의 시작 부분에 있는 커서 위치와 관련하여 rownum의 위치를 나타냅니다.RELATIVE
음수는 RELATIVE
커서가 현재 커서 위치에서 뒤로 이동되도록 지정합니다.
nrows 매개 변수
fetchtype 값 REFRESH
이며 INFO
이 매개 변수를 무시합니다.
nrow 값이 0인 fetchtype 값을 FIRST
지정하면 페치 버퍼에 행이 없는 결과 집합 앞에 커서가 배치됩니다.
nrow 값인 페치타입 값을 LAST
0으로 지정하면 현재 페치 버퍼에 행이 없는 결과 집합 뒤에 커서가 배치됩니다.
, PREV
, ABSOLUTE
RELATIVE
및 PREV_NOADJUST
nrow 값의 NEXT
fetchtype 값이 0
잘못되었습니다.
RPC 고려 사항
RPC 반환 상태는 키 집합 크기 매개 변수가 최종인지 여부를 나타냅니다. 즉, 키 집합 또는 임시 테이블이 비동기적으로 채워지는 경우입니다.
RPC 상태 매개 변수는 다음 표에 표시된 값 중 하나로 설정됩니다.
값 | 설명 |
---|---|
0 |
프로시저가 성공적으로 실행되었습니다. |
0x0001 |
프로시저가 실패했습니다. |
0x0002 |
페치가 결과 앞에 논리적으로 있었던 경우 음수 방향의 페치로 인해 커서 위치가 결과 집합의 시작 부분으로 설정되었습니다. |
0x10 |
빠른 전달 커서가 자동으로 닫혔습니다. |
행은 열 형식(), 행0xd1
(0x2a
), ()와 같은 DONE
0xfd
일반적인 결과 집합으로 반환됩니다. 메타데이터 토큰은 SQL Server 사용자에 대해 sp_cursoropen
0x81
0xa5
지정된 형식과 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