다음을 통해 공유


sp_cursoropen(Transact-SQL)

적용 대상: SQL Server

커서를 엽니다. sp_cursoropen 는 커서 및 커서 옵션과 연결된 SQL 문을 정의한 다음 커서를 채웁니다. sp_cursoropen 는 Transact-SQL 문 및 .의 조합과 DECLARE_CURSOR OPEN동일합니다. 이 프로시저는 TDS(테이블 형식 데이터 스트림) 패킷을 지정하여 ID = 2 호출됩니다.

Transact-SQL 구문 표기 규칙

구문

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-SQL SELECT 또는 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, STATICFAST_FORWARD)은 함께 사용할 수 없습니다.

PARAMETERIZED_STMT 처음 CHECK_ACCEPTED_TYPES 5개 값에 연결 OR 될 수 있습니다.

AUTO_FETCHAUTO_CLOSE 연결할 OR FAST_FORWARD수 있습니다.

이 경우 CHECK_ACCEPTED_TYPES 마지막 5개의 scrollopt 값(KEYSET_ACCEPTABLE, , DYNAMIC_ACCEPTABLE, FORWARD_ONLY_ACCEPTABLESTATIC_ACCEPTABLE또는FAST_FORWARD_ACCEPTABLE) 중 하나 이상이어야 ONON합니다.

STATIC 커서는 항상 .로 READ_ONLY열립니다. 즉, 이 커서를 통해 기본 테이블을 업데이트할 수 없습니다.

ccopt 매개 변수

처음 네 개의 ccopt 값(READ_ONLYSCROLL_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_ACCEPTABLEREAD_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> 될 값을 전달하는 데 사용됩니다.