일반적으로 SELECT 쿼리 문을 사용할 때는 모두 한 행의 레코드에 대한 것입니다.
쿼리 분석기에서 여러 행의 레코드(예: 레코드 세트)를 읽으려면 커서를 사용해야 합니다. WHILE 루프
커서 유형:
1. 정적 커서(데이터 행의 변경 사항을 감지하지 않음)
2. 동적 커서(모든 데이터 행의 변경 사항을 반영) )
3. 정방향 커서만 지원(스크롤 지원 안됨)
4. 키셋 커서(수정사항 반영은 가능하지만 삽입, 삭제는 정확하게 반영되지 않음)
커서 사용순서 :
1 , 커서 정의
2. 커서 열기
3. 커서 사용
4. 커서 닫기
5. 커서 해제
Transact-SQL:
커서 이름 커서 선언 [LOCAL][FORWARD_ONLY | SCROLL][STATIC | KEYSET | DYNAMIC] [READ_ONLY | SCROLL_LOCKS]
for update[of 열 이름[, 열 이름]]
참고: LOCAL 로컬 커서 GLOBAL 전역 커서
FORWARD_ONLY 앞으로 SCROLL 스크롤
STATIC 정적 KEYSET 키 설정 DYNAMIC 동적
READ_ONLY 읽기 전용 SCROLL_LOCKS 커서의 현재 행 잠금
커서의 데이터 가져오기
FETCH [[NEXT | FIRST | LAST |
ABSOLUTE{ n | @nvar | RELATIVE { n | @nvar}]
From ] 커서 이름 [변수에]
참고:
NEXT 다음 줄 이전 줄 첫 번째 줄
LAST 마지막 라인 ABSOLUTE n 라인 n
RELATIVE n 현재 위치에서 시작하는 라인 n
을 변수에 현재 라인의 필드 값을 변수에 할당
커서 상태 변수:
@@fetch_status 커서 상태
0 성공 -1 실패 -2 손실
@@cursor_rows 커서 결과 집합의 행 수
n 행 수 -1 커서가 동적임 0 빈 집합 커서
커서의 현재 행 작동:
커서 이름의 현재
예 1: 커서를 사용하여 쿼리된 데이터 세트 탐색
pubs 사용
go
@auid char 선언(12),@aulname varchar(20),@aufname varchar(20), @st char(2),@auinfo varchar(50)
auth_cur 커서 선언 for
au_id, au_lname, au_fname, state 선택
저자로부터
auth_cur 열기
auth_cur에서 @auid,@aulname,@aufname으로 다음 항목 가져오기 , @st
while (@@fetch_status=0)
시작
print '저자 번호: '+@auid
print '저자 이름: '+@aulname+ ','+@aufname
print 'State: '+@st
print '------------------- --- -----'
auth_cur에서 @auid,@aulname,@aufname, @st
end
auth_cur 닫기
auth_cur 할당 해제예 2: 커서를 사용하여 데이터 수정 및 삭제auth_cur 커서 스크롤 선언au_id, au_lname, au_fname, 상태 선택au_lname 업데이트를 위한 작성자의auth_cur 열기@rowcount int 선언set @rowcount = 6auth_cur에서 절대 @rowcount 가져오기 -- @rowcount 변수 변경 식별된 행은 현재 행으로 설정됩니다 --다음 행은 커서를 사용하여 수정됩니다update Author set au_lname='Zhang' where current of auth_cur-- 커서의 현재 행 수정 --다음 줄은 커서를 사용하여 삭제 작업을 수행합니다. 현재 auth_cur가 있는 작성자에서 삭제