다음을 통해 공유


sp_cursor(Transact-SQL)

적용 대상: SQL Server

위치가 지정된 업데이트를 요청합니다. 이 프로시저는 커서의 페치 버퍼 내에서 하나 이상의 행에 대해 작업을 수행합니다. sp_cursor 는 TDS(테이블 형식 데이터 스트림) 패킷을 지정하여 ID = 1 호출됩니다.

Transact-SQL 구문 표기 규칙

구문

sp_cursor cursor , optype , rownum , table
    [ , value [ ...n ] ]
[ ; ]

인수

cursor

커서 핸들입니다. 커서 매개 변수는 int이며 이 매개 변수가 될 NULL수 없습니다. 이 매개 변수는 데이터베이스 엔진 생성되고 프로시저에서 반환되는 값입니다 handle sp_cursoropen.

optype

커서가 수행하는 작업을 지정하는 필수 매개 변수입니다. optype 매개 변수에는 다음 값 중 하나가 필요합니다.

이름 설명
0X0001 UPDATE 페치 버퍼에서 하나 이상의 행을 업데이트하는 데 사용됩니다. rownum지정된 행이 다시 액세스되고 업데이트됩니다.
0x0002 DELETE 페치 버퍼에서 하나 이상의 행을 삭제하는 데 사용됩니다. rownum지정된 행은 다시 액세스되고 삭제됩니다.
0X0004 INSERT 문을 작성하지 않고 데이터를 삽입합니다 INSERT .
0X0008 REFRESH 기본 테이블에서 버퍼를 다시 채우기 위해 사용되며 낙관적 동시성 제어 UPDATE로 인해 업데이트 또는 삭제가 실패하거나 이후 행을 새로 고치는 데 사용할 수 있습니다.
0X10 LOCK 지정된 행이 포함된 페이지에서 업데이트 잠금(U)을 획득합니다. 이 잠금은 공유 잠금(S)과 호환되지만 배타적 잠금(X) 또는 기타 업데이트 잠금과는 호환되지 않습니다. 단기 잠금을 구현하는 데 사용할 수 있습니다.
0X20 SETPOSITION 프로그램이 후속 DELETE 또는 UPDATE 문을 실행할 때만 사용됩니다.
0X40 ABSOLUTE 와 함께 또는 DELETE.와 함께 UPDATE 만 사용할 수 있습니다. ABSOLUTE 는 커서에서 KEYSET 만 사용되며(커서에 대해서는 DYNAMIC 무시됨) STATIC 커서를 업데이트할 수 없습니다.

참고: 페치되지 않은 키 집합의 행에 지정된 경우 ABSOLUTE 작업이 동시성 검사에 실패할 수 있으며 반환 결과를 보장할 수 없습니다.

rownum

커서가 작동하거나 업데이트하거나 삭제하는 페치 버퍼의 행을 지정합니다. 이 매개 변수는 사용 하 여 sp_cursor수행 하는 업데이트 RELATIVENEXT또는 PREVIOUS 삭제 또는 페치 작업의 시작 지점에 영향을 주지 않습니다.

rownum은 int 입력 값을 호출하는 필수 매개 변수입니다.

  • 1

    인출 버퍼의 첫 번째 행을 나타냅니다.

  • 2, 3, 4, ...n

    두 번째, 세 번째, 네 번째 행 등을 나타냅니다.

  • 0

    인출 버퍼의 모든 행을 나타냅니다.

이 매개 변수는 , DELETE또는 REFRESHLOCK optype 값에UPDATE만 사용할 수 있습니다.

table

커서 정의에 조인이 포함되거나 값 매개 변수에서 모호한 열 이름이 반환되는 경우 optype이 적용되는 테이블을 식별하는 테이블 이름입니다. 특정 테이블이 지정되지 않은 경우 기본값은 절의 첫 번째 테이블 FROM 입니다. 테이블 매개 변수는 선택 사항이며 문자열 입력 값이 필요합니다. 문자열은 모든 문자 또는 유니코드 데이터 형식 또는 여러 부분으로 구성된 테이블 이름으로 지정할 수 있습니다.

value

값을 삽입하거나 업데이트하는 데 사용됩니다. 문자열 매개 변수는 값과 INSERT optype 값에 UPDATE 만 사용됩니다. 문자열은 모든 문자 또는 유니코드 데이터 형식으로 지정할 수 있습니다.

사용자가 값에 대한 매개 변수 이름을 할당할 수 있습니다.

반환 코드 값

0(성공) 또는 1(실패).

설명

optype 매개 변수

오타입 값과 함께, , 또는 ; 또는 LOCKABSOLUTE 오타입 값의 DELETEUPDATE 조합을 SETPOSITION 제외하고 상호 배타적입니다. REFRESHDELETEUPDATE

값의 UPDATE 절은 SET 매개 변수에서 생성됩니다.

값을 사용할 INSERT <optype> 때의 이점 중 하나는 문자가 아닌 데이터를 삽입할 문자 형식으로 변환하지 않도록 할 수 있다는 것입니다. 값은 .와 같은 방식으로 UPDATE지정됩니다. 필요한 열이 포함되지 INSERT 않으면 실패합니다.

  • 값은 SETPOSITION 어떤, 또는 PREVIOUS 페치 작업의 시작점에 RELATIVENEXT영향을 주지 않으며 인터페이스를 사용하여 sp_cursor 수행되는 업데이트 또는 삭제도 수행하지 않습니다. 인출 버퍼에서 행을 지정하지 않는 숫자는 오류가 반환되지 않고 위치가 1설정됩니다. 일단 실행되면 SETPOSITION 위치는 다음 sp_cursorfetch 작업, T-SQL FETCH 작업 또는 sp_cursor SETPOSITION 동일한 커서를 통한 작업까지 계속 적용됩니다. 후속 sp_cursorfetch 작업은 커서의 위치를 새 인출 버퍼의 첫 번째 행으로 설정하지만 다른 커서 호출은 위치 값에 영향을 주지 않습니다. SETPOSITION는 위치 값을 마지막으로 수정된 OR 행으로 REFRESH설정하기 위해 , UPDATEDELETELOCK 절로 연결할 수 있습니다.

fetch 버퍼의 행이 rownum 매개 변수를 통해 지정되지 않은 경우 위치는 1로 설정되며 오류가 반환되지 않습니다. 위치가 설정되면 동일한 커서에서 다음 sp_cursorfetch 작업, T-SQL FETCH 작업 또는 sp_cursor SETPOSITION 작업이 수행될 때까지 계속 적용됩니다.

SETPOSITION를 사용하여 절DELETEUPDATEOR REFRESH연결하거나 LOCK 커서 위치를 마지막으로 수정한 행으로 설정할 수 있습니다.

rownum 매개 변수

지정한 경우 rownum 매개 변수는 페치 버퍼 내의 행 번호 대신 키 집합 내의 행 번호로 해석될 수 있습니다. 사용자는 동시성 제어가 유지되는지를 확인해야 합니다. 즉, 커서의 경우 SCROLL_LOCKS 지정된 행(트랜잭션을 통해 수행할 수 있음)에 대한 잠금을 독립적으로 유지 관리해야 합니다. 커서의 경우 OPTIMISTIC 이 작업을 수행하려면 이전에 행을 가져왔어야 합니다.

테이블 매개 변수

optype 값이 UPDATE 거나 INSERT 전체 업데이트 또는 삽입 문이 값 매개 변수로 제출되는 경우 테이블에 지정된 값은 무시됩니다.

참고 항목

뷰와 관련하여 뷰에 참여하는 테이블은 하나만 수정할 수 있습니다. 매개 변수 열 이름은 뷰의 열 이름을 반영해야 하지만 테이블 이름은 기본 기본 테이블의 이름일 수 있습니다(이 경우 sp_cursor 뷰 이름을 대체).

매개 변수

인수 섹션의 앞부분에서 설명한 대로 값을 사용하는 규칙에 대한 두 가지 대안이 있습니다.

  1. 명명된 값 매개 변수에 대해 select-list의 열 이름 앞에 추가된 이름을 @ 사용할 수 있습니다. 이 대안의 한 가지 장점은 데이터 변환이 필요하지 않을 수 있다는 것입니다.

  2. 매개 변수를 사용하여 전체 UPDATE 또는 문을 제출하거나 INSERT 여러 매개 변수를 사용하여 데이터베이스 엔진 전체 문으로 빌드되는 또는 문의 일부를 UPDATE INSERT 제출합니다. 예제는 이 문서의 뒷부분에 있는 예제 섹션에서 찾을 수 있습니다.

예제

대체 값 매개 변수 사용

UPDATE의 경우

단일 매개 변수를 사용하는 UPDATE 경우 다음 구문을 사용하여 문을 제출할 수 있습니다.

[ [ UPDATE <table_name> ] SET ] { <column name> = expression } [ , ...n ]

지정한 경우 UPDATE <table_name> 테이블 매개 변수에 대해 지정된 값은 무시됩니다.

여러 매개 변수를 사용하는 경우 첫 번째 매개 변수는 다음 형식의 문자열이어야 합니다.

[ SET ] <column name> = expression [ , ...n ]

후속 매개 변수는 다음 형식이어야 합니다.

<column name> = expression [ , ...n ]

이 경우 <table_name> 생성된 update 문에서 테이블 매개 변수가 지정하거나 기본값으로 지정한 문입니다.

INSERT의 경우

단일 매개 변수를 사용하는 INSERT 경우 다음 구문을 사용하여 문을 제출할 수 있습니다.

[ [ INSERT [ INTO ] <table_name> ] VALUES ] ( <expression> [ , ...n ] )

지정한 경우 INSERT <table_name> 테이블 매개 변수에 대해 지정된 값은 무시됩니다.

여러 매개 변수를 사용하는 경우 첫 번째 매개 변수는 다음 형식의 문자열이어야 합니다.

[ VALUES ] ( <expression> [ , ...n ] )

다음 매개 변수는 지정된 위치를 VALUES 제외하고 형식expression [ , ...n ]이어야 합니다. 이 경우 마지막 식 뒤에 후행 ) 이 있어야 합니다. 이 경우 <table_name> 생성된 UPDATE 문에서 테이블 매개 변수가 지정하거나 기본값으로 지정한 문입니다.

참고 항목

예를 들어 하나의 매개 변수를 명명된 매개 변수로 제출할 수 있습니다 @values. 이 경우 다른 명명된 매개 변수를 사용할 수 없습니다.