sp_cursor(Transact-SQL)

적용 대상:SQL Server

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

적용 대상: SQL Server(SQL Server 2008(10.0.x)~현재 버전)

Transact-SQL 구문 표기 규칙

구문

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

인수

cursor
커서 핸들입니다. 커서는 int 입력 값을 호출하는 필수 매개 변수입니다. 커서는 SQL Server에서 생성되고 sp_cursoropen 프로시저에서 반환되는 핸들 값입니다.

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

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

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

rownum
커서가 작동하거나 업데이트하거나 삭제할 페치 버퍼의 행을 지정합니다.

참고 항목

이는 RELATIVE, NEXT 또는 PREVIOUS 페치 작업의 시작점이나 sp_cursor 사용하여 수행되는 업데이트 또는 삭제에는 영향을 주지 않습니다.

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

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

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

3, 4, 5
세 번째 행 등을 나타냅니다.

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

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

참고 항목

UPDATE, DELETE, REFRESH 또는 LOCK optype 값에만 사용할 수 있습니다.

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

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

참고 항목

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

반환 코드 값

RPC를 사용하는 경우 버퍼 번호가 0인 위치가 지정된 DELETE 또는 UPDATE 작업은 페치 버퍼의 모든 행에 대해 행 수가 0(실패) 또는 1(성공)인 DONE 메시지를 반환합니다.

설명

optype 매개 변수

SETPOSITION과 UPDATE, DELETE, REFRESH 또는 LOCK의 조합을 제외하고 UPDATE 또는 DELETE 를 사용한 ABSOLUTE 또는 optype 값은 상호 배타적입니다.

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

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

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

fetch 버퍼의 행이 rownum 매개 변수를 통해 지정되지 않은 경우 위치는 오류 없이 1로 설정됩니다. 위치가 설정되고 나면 같은 커서에서 다음 sp_cursorfetch 작업, T-SQL FETCH 작업 또는 sp_cursor SETPOSITION 작업을 수행할 때까지는 해당 위치가 적용된 상태로 유지됩니다.

SETPOSITION은 새로 고침, UPDATE, DELETE 또는 LOCK이 있는 OR 절에 의해 연결되어 커서 위치를 마지막으로 수정된 행으로 설정합니다.

rownum 매개 변수

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

table 매개 변수

optype 값이 UPDATE 또는 INSERT이고 전체 업데이트 또는 insert 문이 값 매개 변수로 제출되면 테이블에 지정된 값은 무시됩니다.

참고 항목

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

value 매개 변수

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

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

  2. 매개 변수를 사용하여 전체 UPDATE 또는 INSERT 문을 제출하거나 여러 매개 변수를 사용하여 SQL Server가 전체 문으로 빌드할 UPDATE 또는 INSERT 문의 일부를 제출합니다. 이 예제는 이 항목의 뒷부분에 있는 예제 섹션에서 찾을 수 있습니다.

대체 값 매개 변수 사용

업데이트의 경우:

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

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

참고 항목

UPDATE <테이블 이름을> 지정하면 테이블 매개 변수에 지정된 모든 값이 무시됩니다.

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

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

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

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

이 경우 <생성된 update 문의 테이블 이름은> 테이블 매개 변수에 의해 지정되거나 기본값으로 지정됩니다.

INSERT의 경우:

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

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

참고 항목

INSERT <테이블 이름을> 지정하면 테이블 매개 변수에 지정된 모든 값이 무시됩니다.

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

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

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

expression [,...n]

VALUES가 지정된 위치를 제외하고, 이 경우 마지막 식 뒤에 후행 ")"이 있어야 합니다. 이 경우 <생성된 UPDATE 문의 테이블 이름은> 테이블 매개 변수에 의해 지정되거나 기본값으로 지정됩니다.

참고 항목

하나의 매개 변수를 명명된 매개 변수(예: "@VALUES")로 제출할 수 있습니다. 이 경우 다른 명명된 매개 변수를 사용할 수 없습니다.

참고 항목

sp_cursoropen(Transact-SQL)
sp_cursorfetch(Transact-SQL)
시스템 저장 프로시저(Transact-SQL)