sp_cursoropen(Transact-SQL)
적용 대상: SQL Server
커서를 엽니다. sp_cursoropen
는 커서 및 커서 옵션과 연결된 SQL 문을 정의한 다음 커서를 채웁니다. sp_cursoropen
는 Transact-SQL 문 및 .의 조합과 DECLARE_CURSOR
OPEN
동일합니다. 이 프로시저는 TDS(테이블 형식 데이터 스트림) 패킷을 지정하여 ID = 2
호출됩니다.
구문
sp_cursoropen cursor OUTPUT
, stmt
[ , scrollopt [ OUTPUT ]
[ , ccopt [ OUTPUT ]
[ , rowcount OUTPUT [ , boundparam ] [ , ...n ] ] ] ]
[ ; ]
인수
cursor
SQL Server에서 생성하는 커서 식별자입니다. 커서는 handle
커서와 관련된 모든 후속 프로시저에서 제공해야 하는 값입니다(예: sp_cursorfetch
.). 커서 매개 변수는 int이며 이 매개 변수가 될 NULL
수 없습니다.
커서를 사용하면 단일 데이터베이스 연결에서 여러 커서를 활성화할 수 있습니다.
stmt
커서 결과 집합을 정의하는 필수 매개 변수입니다. 모든 문자열 형식(유니코드, 크기 등에 관계없이)의 유효한 쿼리 문자열(구문 및 바인딩)은 유효한 stmt 값 형식으로 사용될 수 있습니다.
scrollopt
스크롤 옵션입니다. scrollopt 매개 변수는 기본값NULL
인 int이며 다음 값 중 하나일 수 있습니다.
값 | 설명 |
---|---|
0x0001 |
KEYSET |
0x0002 |
DYNAMIC |
0x0004 |
FORWARD_ONLY |
0x0008 |
STATIC |
0x10 |
FAST_FORWARD |
0x1000 |
PARAMETERIZED_STMT |
0x2000 |
AUTO_FETCH |
0x4000 |
AUTO_CLOSE |
0x8000 |
CHECK_ACCEPTED_TYPES |
0x10000 |
KEYSET_ACCEPTABLE |
0x20000 |
DYNAMIC_ACCEPTABLE |
0x40000 |
FORWARD_ONLY_ACCEPTABLE |
0x80000 |
STATIC_ACCEPTABLE |
0x100000 |
FAST_FORWARD_ACCEPTABLE |
요청된 값이 stmt로 정의된 커서에 적합하지 않을 수 있으므로 이 매개 변수는 입력 및 출력으로 사용됩니다. 이러한 경우 SQL Server는 적절한 값을 할당합니다.
ccopt
동시성 제어 옵션입니다. ccopt는 다음 int 입력 값 중 하나가 필요한 선택적 매개 변수입니다.
값 | 설명 |
---|---|
0x0001 |
READ_ONLY |
0x0002 |
SCROLL_LOCKS (이전에는 )로 알려져 있습니다 LOCKCC . |
0x0004 |
OPTIMISTIC (이전에는 )로 알려져 있습니다 OPTCC . |
0x0008 |
OPTIMISTIC (이전에는 )로 알려져 있습니다 OPTCCVAL . |
0x2000 |
ALLOW_DIRECT |
0x4000 |
UPDT_IN_PLACE |
0x8000 |
CHECK_ACCEPTED_OPTS |
0x10000 |
READ_ONLY_ACCEPTABLE |
0x20000 |
SCROLL_LOCKS_ACCEPTABLE |
0x40000 |
OPTIMISTIC_ACCEPTABLE |
0x80000 |
OPTIMISITC_ACCEPTABLE |
scrollopt와 마찬가지로 SQL Server는 요청된 ccopt 값을 재정의할 수 있습니다.
rowcount
에 사용할 페치 버퍼 행의 수입니다 AUTO_FETCH
. 기본값은 20개 행입니다. rowcount 는 입력 값과 반환 값으로 할당되는 경우 다르게 동작합니다.
입력 값으로 | 반환 값으로 |
---|---|
AUTO_FETCH scrollopt 값을 지정하면 행 개수는 인출 버퍼에 배치할 행 수를 나타냅니다.참고: > 0 지정된 경우 AUTO_FETCH 유효한 값이지만, 그렇지 않으면 무시됩니다. |
scrollopt AUTO_FETCH 값이 지정된 경우를 제외하고 결과 집합의 행 수를 나타냅니다. |
boundparam
추가 매개 변수의 사용을 의미합니다. boundparam은 scrollopt PARAMETERIZED_STMT
값이 .로 설정된 경우 지정해야 하는 ON
선택적 매개 변수입니다.
반환 코드 값
오류가 발생하지 sp_cursoropen
않으면 다음 값 중 하나를 반환합니다.
값 | 설명 |
---|---|
0 |
프로시저가 성공적으로 실행되었습니다. |
0x0001 |
실행 중에 오류가 발생했으나 작업에서 오류를 발생시킬 만큼 심각하지는 않은 사소한 오류입니다. |
0x0002 |
비동기 작업이 진행 중입니다. |
0x0002 |
FETCH 작업이 진행 중입니다. |
A |
이 커서의 할당이 취소되었으며 사용할 수 없습니다. |
오류가 발생하면 반환 값이 일치하지 않을 수 있으며 정확도를 보장할 수 없습니다.
rowcount 매개 변수를 반환 값으로 지정하면 다음 결과 집합이 발생합니다.
값 | 설명 |
---|---|
-1 |
행 수를 알 수 없거나 적용할 수 없는 경우 반환됩니다. |
-n |
비동기 채우기가 적용되는 경우 반환됩니다. scrollopt AUTO_FETCH 값을 지정할 때 인출 버퍼에 배치된 행 수를 나타냅니다. |
RPC를 사용 중인 경우 반환 값은 다음과 같습니다.
값 | 설명 |
---|---|
0 |
프로시저가 성공했습니다. |
1 |
프로시저가 실패했습니다. |
2 |
키 집합 커서가 비동기적으로 생성됩니다. |
16 |
빠른 전달 커서가 자동으로 닫혔습니다. |
프로시저가 sp_cursoropen
성공적으로 실행되면 RPC 반환 매개 변수와 TDS 열 형식 정보0xa0
(및 0xa1
메시지)가 포함된 결과 집합이 전송됩니다. 실패하면 하나 이상의 TDS 오류 메시지가 전송됩니다. 두 경우 모두 행 데이터가 반환되지 않으며 DONE
메시지 수는 .입니다 0
. 0x81
는 및 0xa4
토큰 스트림과 함께 0xa5
반환됩니다(문에 대한 SELECT
표준).
설명
stmt 매개 변수
stmt가 저장 프로시저의 실행을 지정하는 경우 입력 매개 변수는 stmt 문자열의 일부로 상수로 정의되거나 boundparam 인수로 지정될 수 있습니다. 선언된 변수는 이러한 방식으로 바인딩된 매개 변수로 전달될 수 있습니다.
stmt 매개 변수의 허용된 내용은 ccopt 반환 값이 나머지 ccopt ALLOW_DIRECT
값에 의해 OR
연결되었는지 여부에 따라 달라집니다.
지정되지 않은 경우
ALLOW_DIRECT
단일SELECT
문을 포함하는 저장 프로시저를 호출하는 Transact-SQLSELECT
또는EXECUTE
문을 사용해야 합니다. 또한 문은SELECT
커서로 한정되어야 합니다. 즉, 키워드SELECT INTO
또는FOR BROWSE
를 포함할 수 없습니다.지정된 경우
ALLOW_DIRECT
여러 문이 있는 다른 저장 프로시저를 실행하는 문을 포함하여 하나 이상의 Transact-SQL 문이 발생할 수 있습니다.SELECT
키워드SELECT INTO
를 포함하거나SELECT
실행되고 커서를 만들지 않는 문이 아닌 문 또는FOR BROWSE
문입니다. 여러 문의 일괄 처리에 포함된 문SELECT
도 마찬가지입니다. 문에SELECT
커서만 관련된 절이 포함된 경우 해당 절은 무시됩니다. 예를 들어 ccopt 값이면0x2002
다음을 위한 요청입니다.커서로 한정되는 단일
SELECT
문만 있는 경우 또는 스크롤 잠금이 있는 커서여러 문, 단일 비
SELECT
문 또는SELECT
커서로 한정되지 않는 문이 있는 경우 직접 문 실행입니다.
scrollopt 매개 변수
처음 5개의 scrollopt 값(KEYSEY
, DYNAMIC
, FORWARD_ONLY
, STATIC
및 FAST_FORWARD
)은 함께 사용할 수 없습니다.
PARAMETERIZED_STMT
처음 CHECK_ACCEPTED_TYPES
5개 값에 연결 OR
될 수 있습니다.
AUTO_FETCH
로 AUTO_CLOSE
연결할 OR
FAST_FORWARD
수 있습니다.
이 경우 CHECK_ACCEPTED_TYPES
마지막 5개의 scrollopt 값(KEYSET_ACCEPTABLE
, , DYNAMIC_ACCEPTABLE
, FORWARD_ONLY_ACCEPTABLE
STATIC_ACCEPTABLE
또는FAST_FORWARD_ACCEPTABLE
) 중 하나 이상이어야 ON
ON
합니다.
STATIC
커서는 항상 .로 READ_ONLY
열립니다. 즉, 이 커서를 통해 기본 테이블을 업데이트할 수 없습니다.
ccopt 매개 변수
처음 네 개의 ccopt 값(READ_ONLY
SCROLL_LOCKS
및 두 값 모두OPTIMISTIC
)은 함께 사용할 수 없습니다.
참고 항목
처음 네 개의 ccopt 값 중 하나를 선택하면 커서가 읽기 전용인지 또는 업데이트 손실을 방지하기 위해 잠금 또는 낙관적 메서드를 사용하는지 여부가 결정됩니다. ccopt 값을 지정하지 않으면 기본값은 .입니다OPTIMISTIC
.
ALLOW_DIRECT
처음 CHECK_ACCEPTED_TYPES
4개 값 중 한 값에 연결 OR
될 수 있습니다.
UPDT_IN_PLACE
은 값 SCROLL_LOCKS
또는 값 중 OPTIMISTIC
하나에 연결 OR
READ_ONLY
될 수 있습니다.
이 경우 CHECK_ACCEPTED_TYPES
마지막 4개 ccopt 값 중 하나 이상(SCROLL_LOCKS_ACCEPTABLE
READ_ONLY_ACCEPTABLE
및 값 중 OPTIMISTIC_ACCEPTABLE
하나)도 ON이어야 ON
합니다.
UPDATE
위치 지정 및 DELETE
함수는 페치 버퍼 내에서만 수행될 수 있으며 ccopt 값이 같거나 OPTIMISTIC
같은 경우에만 수행될 수 있습니다SCROLL_LOCKS
. 지정된 값이면 SCROLL_LOCKS
작업이 성공하도록 보장됩니다. 지정된 값이면 OPTIMISTIC
행이 마지막으로 가져온 이후 변경된 경우 작업이 실패합니다.
이 오류가 발생하는 이유는 지정된 값인 경우 OPTIMISTIC
SQL Server에 의해 결정된 타임스탬프 또는 체크섬 값을 비교하여 낙관적 통화 제어 함수가 수행되기 때문입니다. 이러한 행이 일치하지 않으면 작업이 실패합니다.
반환 값으로 지정하면 UPDT_IN_PLACE
다음 결과가 적용됩니다.
고유 인덱스를 사용하여 테이블에 배치된 업데이트를 수행할 때 설정되지 않은 경우 커서는 작업 테이블에서 행을 삭제하고 커서에서 사용하는 키 열의 끝에 삽입하여 해당 열을 변경합니다.
설정된
ON
경우 커서는 작업 테이블의 원래 행에 있는 키 열을 업데이트합니다.
bound_param 매개 변수
매개 변수 이름은 코드의 오류 메시지에 따라 지정된 경우 PARAMETERIZED_STMT
매개 변수 이름이 paramdef여야 합니다. PARAMETERIZED_STMT
지정하지 않으면 오류 메시지에 이름이 지정되지 않습니다.
RPC 고려 사항
RPC RETURN_METADATA
입력 플래그는 커서 선택 목록 메타데이터가 TDS 스트림에 반환되도록 요청하도록 0x0001
설정할 수 있습니다.
예제
A. bound_param 매개 변수
다섯 번째 매개 변수 이후의 모든 매개 변수는 문 계획에 입력 매개 변수로 전달됩니다. 첫 번째 매개 변수는 다음 형식의 문자열이어야 합니다.
<parameter_name> <data_type> [ ,... n ]
후속 매개 변수는 문에서 대체 <parameter_name>
될 값을 전달하는 데 사용됩니다.