3개의 데이터 테스트
CREATE TABLE test_main ( id INT, value VARCHAR(10), PRIMARY KEY(id) );
INSERT INTO test_main(id, value) VALUES (1, 'ONE');
INSERT INTO test_main(id, value) ) VALUES (2, 'TWO');
INSERT INTO test_main(id, value) VALUES (3, 'THREE');
간단한 루프 처리
DECLARE
@id INT, @value VARCHAR(10);
BEGIN
-- 커서를 정의합니다.
DECLARE c_test_main CURSOR FAST_FORWARD FOR
SELECT id, value FROM test_main;
-- 커서를 엽니다.
OPEN c_test_main;
--데이터를 채웁니다.
다음 가져오기 FROM c_test_main INTO @ id, @value;
--데이터가 검색되면 처리됩니다.
WHILE @@fetch_status = 0
BEGIN
PRINT @value;
- 다음 데이터를 입력합니다.
FETCH NEXT FROM c_test_main INTO @id, @value;
END;
- 커서 닫기
CLOSE c_test_main;
-- 커서를 놓습니다.
DEALLOCATE c_test_main;
END;
go
ONE
TWO
THREE
업데이트 커서
DECLARE
@id INT, @value VARCHAR (10);
BEGIN
--커서를 정의합니다.
DECLARE c_test_main CURSOR FOR
SELECT id, value FROM test_main
업데이트용;
--커서 열기.
OPEN c_test_main;
--데이터 채우기.
c_test_main INTO @id, @value에서 다음 항목 가져오기 ;
--데이터가 검색되면 처리됩니다.
WHILE @@fetch_status = 0
BEGIN
PRINT @value;
--데이터 업데이트 .
UPDATE
test_main
SET
value = value + '1'
WHERE
CURRENT OF c_test_main;
--다음 데이터를 입력합니다.
FETCH NEXT FROM c_test_main INTO @id, @value;
END;
--커서 닫기
CLOSE c_test_main;
-- 커서를 놓습니다.
DEALLOCATE c_test_main;
END;
go
ONE
(1 행 영향 받음)
TWO
Three
SELECT * FROM test_main;
이동
id 값
------------ ----------
🎜> 3 Three1
참고: 테스트 목적으로 test_main 테이블의 데이터가 11개 항목으로 늘어났습니다.
DECLARE
@id INT, @value VARCHAR(10);BEGIN
-- 커서를 정의합니다. DECLARE c_test_main CURSOR SCROLL FOR
SELECT id, value FROM test_main ;
-- 커서를 엽니다.
OPEN c_test_main;
FETCH FIRST FROM c_test_main INTO @id, @value;
PRINT '커서 첫 번째 행:' + @value;
-- 데이터를 채웁니다.
FETCH LAST FROM c_test_main INTO @id, @value;
PRINT '마지막 행 커서에서:' + @value ;
-- 데이터를 채웁니다.
FETCH ABSOLUTE 3 FROM c_test_main INTO @id, @value;
PRINT '커서의 라인 3 [절대 주소] :' + @value;
-- 데이터를 채웁니다.
FETCH RELATIVE -2 FROM c_test_main INTO @id, @value;
PRINT '커서 [상대 주소]의 라인 -2: ' + @value;
-- 데이터를 채웁니다.
FETCH PRIOR FROM c_test_main INTO @id, @value;
PRINT '커서의 이전 행:' + @value;
-- 데이터를 채웁니다.
FETCH NEXT FROM c_test_main INTO @id, @value;
PRINT '커서의 다음 줄:' + @value;
-- 커서 닫기
CLOSE c_test_main;
-- 커서를 놓습니다.
END;
go
SQL-92 구문
DECLARE 커서_이름 [ INSENSITIVE ] [ SCROLL ] CURSOR
FOR select_statement
[ FOR { 읽기 전용 | UPDATE [ OF 열 이름 [ ,...n ] ] } ]
Transact-SQL扩 확장语법
DECLARE 커서 이름 CURSOR
[ 로컬 | 글로벌 ]
[ FORWARD_ONLY | 스크롤 ]
[ 정적 | 키셋 | 다이나믹 | FAST_FORWARD ]
[ 읽기 전용 | 스크롤_잠금 | 낙관적 ]
[ 유형_경고 ]
FOR select_statement
[ FOR UPDATE [ OF 열 이름 [ ,...n ] ] ]