다음을 통해 공유


동적 커서(데이터베이스 엔진)

동적 커서는 정적 커서의 반대 개념입니다. 커서를 통해 스크롤할 때 동적 커서는 행의 모든 변경 내용을 결과 집합에 반영합니다. 따라서 인출할 때마다 결과 집합에서 행의 데이터 값, 순서 및 멤버 자격이 변경될 수 있습니다. 모든 사용자가 실행한 모든 UPDATE, INSERT 및 DELETE 문은 커서를 통해 볼 수 있습니다. SQLSetPos와 같은 API 함수 또는 Transact-SQL WHERE CURRENT OF 절을 사용하여 커서를 통해 업데이트한 경우 즉시 그 결과를 볼 수 있습니다. 커서 트랜잭션 격리 수준을 커밋되지 않은 읽기로 설정한 경우를 제외하고는 커서 외부에서 수행된 업데이트는 커밋될 때까지 볼 수 없습니다.

[!참고] 동적 커서에 대한 쿼리 실행을 위해 선택한 실행 계획에 힙 검색이 사용되고 페이지 또는 테이블 잠금이 획득되는 조건에서 행을 삭제하면 전체 페이지의 할당이 취소될 수 있습니다. 이 경우 분할을 위해 동적 커서에서 사용하는 표식이 유효하지 않게 될 수 있고 이후에 커서로부터 인출할 때 오류 16931이 발생하여 실패할 수 있습니다. 이러한 문제는 테이블에 클러스터형 인덱스를 만들거나 다른 커서 유형을 사용하거나 페이지 및 테이블 수준 잠금을 방지할 수 있는지 평가함으로써 해결할 수 있습니다.

[!참고] SQL Server 2005 에서 동적 커서 작업 테이블 업데이트는 항상 해당 위치에서 적절하게 수행됩니다. 즉, 업데이트 과정의 일부로 키 열이 변경되는 경우에도 현재 행은 새로 고쳐집니다. 이와 같은 경우 SQL Server 2000 에서는 현재 행이 삭제된 것으로 표시되지만(해당 위치에서 적절하게 수행되지 않는 키 집합 커서에 대한 경우처럼) 작업 테이블의 끝에 삽입되지 않습니다(키 집합 커서에 대한 경우처럼). 그 결과 커서를 새로 고치는 과정에서 행을 찾지 못하여 누락된 것으로 보고됩니다. SQL Server 2005에서는 커서 작업 테이블이 동기화된 상태로 유지되며 새로운 키가 있으므로 새로 고침 작업을 통해 행을 찾을 수 있습니다.