sp_cursor(Transact-SQL)
적용 대상: SQL Server
위치가 지정된 업데이트를 요청합니다. 이 프로시저는 커서의 페치 버퍼 내에서 하나 이상의 행에 대해 작업을 수행합니다. sp_cursor
는 TDS(테이블 형식 데이터 스트림) 패킷을 지정하여 ID = 1
호출됩니다.
구문
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
수행 하는 업데이트 RELATIVE
NEXT
또는 PREVIOUS
삭제 또는 페치 작업의 시작 지점에 영향을 주지 않습니다.
rownum은 int 입력 값을 호출하는 필수 매개 변수입니다.
1
인출 버퍼의 첫 번째 행을 나타냅니다.
2, 3, 4, ...n
두 번째, 세 번째, 네 번째 행 등을 나타냅니다.
0
인출 버퍼의 모든 행을 나타냅니다.
이 매개 변수는 , DELETE
또는 REFRESH
LOCK
optype 값에UPDATE
만 사용할 수 있습니다.
table
커서 정의에 조인이 포함되거나 값 매개 변수에서 모호한 열 이름이 반환되는 경우 optype이 적용되는 테이블을 식별하는 테이블 이름입니다. 특정 테이블이 지정되지 않은 경우 기본값은 절의 첫 번째 테이블 FROM
입니다. 테이블 매개 변수는 선택 사항이며 문자열 입력 값이 필요합니다. 문자열은 모든 문자 또는 유니코드 데이터 형식 또는 여러 부분으로 구성된 테이블 이름으로 지정할 수 있습니다.
value
값을 삽입하거나 업데이트하는 데 사용됩니다. 값 문자열 매개 변수는 값과 INSERT
optype 값에 UPDATE
만 사용됩니다. 문자열은 모든 문자 또는 유니코드 데이터 형식으로 지정할 수 있습니다.
사용자가 값에 대한 매개 변수 이름을 할당할 수 있습니다.
반환 코드 값
0
(성공) 또는 1
(실패).
설명
optype 매개 변수
오타입 값과 함께, , 또는 ; 또는 LOCK
ABSOLUTE
오타입 값의 DELETE
UPDATE
조합을 SETPOSITION
제외하고 상호 배타적입니다. REFRESH
DELETE
UPDATE
값의 UPDATE
절은 SET
값 매개 변수에서 생성됩니다.
값을 사용할 INSERT <optype>
때의 이점 중 하나는 문자가 아닌 데이터를 삽입할 문자 형식으로 변환하지 않도록 할 수 있다는 것입니다. 값은 .와 같은 방식으로 UPDATE
지정됩니다. 필요한 열이 포함되지 INSERT
않으면 실패합니다.
- 값은
SETPOSITION
어떤, 또는PREVIOUS
페치 작업의 시작점에RELATIVE
NEXT
영향을 주지 않으며 인터페이스를 사용하여sp_cursor
수행되는 업데이트 또는 삭제도 수행하지 않습니다. 인출 버퍼에서 행을 지정하지 않는 숫자는 오류가 반환되지 않고 위치가1
설정됩니다. 일단 실행되면SETPOSITION
위치는 다음sp_cursorfetch
작업, T-SQLFETCH
작업 또는sp_cursor
SETPOSITION
동일한 커서를 통한 작업까지 계속 적용됩니다. 후속sp_cursorfetch
작업은 커서의 위치를 새 인출 버퍼의 첫 번째 행으로 설정하지만 다른 커서 호출은 위치 값에 영향을 주지 않습니다.SETPOSITION
는 위치 값을 마지막으로 수정된OR
행으로REFRESH
설정하기 위해 ,UPDATE
및DELETE
LOCK
절로 연결할 수 있습니다.
fetch 버퍼의 행이 rownum 매개 변수를 통해 지정되지 않은 경우 위치는 1로 설정되며 오류가 반환되지 않습니다. 위치가 설정되면 동일한 커서에서 다음 sp_cursorfetch
작업, T-SQL FETCH
작업 또는 sp_cursor
SETPOSITION
작업이 수행될 때까지 계속 적용됩니다.
SETPOSITION
를 사용하여 절DELETE
UPDATE
을 OR
REFRESH
연결하거나 LOCK
커서 위치를 마지막으로 수정한 행으로 설정할 수 있습니다.
rownum 매개 변수
지정한 경우 rownum 매개 변수는 페치 버퍼 내의 행 번호 대신 키 집합 내의 행 번호로 해석될 수 있습니다. 사용자는 동시성 제어가 유지되는지를 확인해야 합니다. 즉, 커서의 경우 SCROLL_LOCKS
지정된 행(트랜잭션을 통해 수행할 수 있음)에 대한 잠금을 독립적으로 유지 관리해야 합니다. 커서의 경우 OPTIMISTIC
이 작업을 수행하려면 이전에 행을 가져왔어야 합니다.
테이블 매개 변수
optype 값이 UPDATE
거나 INSERT
전체 업데이트 또는 삽입 문이 값 매개 변수로 제출되는 경우 테이블에 지정된 값은 무시됩니다.
참고 항목
뷰와 관련하여 뷰에 참여하는 테이블은 하나만 수정할 수 있습니다. 값 매개 변수 열 이름은 뷰의 열 이름을 반영해야 하지만 테이블 이름은 기본 기본 테이블의 이름일 수 있습니다(이 경우 sp_cursor
뷰 이름을 대체).
값 매개 변수
인수 섹션의 앞부분에서 설명한 대로 값을 사용하는 규칙에 대한 두 가지 대안이 있습니다.
명명된 값 매개 변수에 대해 select-list의 열 이름 앞에 추가된 이름을
@
사용할 수 있습니다. 이 대안의 한 가지 장점은 데이터 변환이 필요하지 않을 수 있다는 것입니다.매개 변수를 사용하여 전체
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
. 이 경우 다른 명명된 매개 변수를 사용할 수 없습니다.