간단한 커서 옵션 Static|Keyset|DYNAMIC|FASTFORWARD

5728 단어
오래 전 태감의 블로그 한 편을 이어받다.지금 몇 가지 옵션의 소개를 보충합니다.
쓰는 문구가 다 이거예요.
IF OBJECT_ID('T1') IS NOT NULL
    DROP TABLE T1
GO
CREATE TABLE T1
(
    ID INT  PRIMARY KEY,
    seq INT
)

DECLARE @seq INT=0
WHILE @seq < 50
BEGIN
    INSERT INTO dbo.T1
            (  ID,seq )
    VALUES  ( @seq+1,@seq)
    SET @seq=@seq+1
END

 
 
 1 DECLARE @seq INT,@ID INT=1
 2 
 3 
 4 DECLARE CUR_Static CURSOR STATIC|DYNAMIC|KEYSET|FAST_FORWARD
 5     FOR SELECT  ID,seq FROM T1 ORDER BY ID
 6 
 7 OPEN CUR_Static 
 8 FETCH NEXT FROM CUR_Static INTO @ID,@seq
 9 WHILE @@FETCH_STATUS = 0
10 BEGIN    
12     PRINT @seq
13     FETCH NEXT FROM CUR_Static INTO @ID,@seq    
14 END
15 CLOSE CUR_Static
16 DEALLOCATE CUR_Static

 
 
Static 옵션
Static 옵션은tempdb에서 결과 집합을 완전히 캐시하는 것과 같습니다.외부 수정 데이터는 커서 자체에 영향을 주지 않습니다. (커서 결과 집합의 임의의 열을 수정해도 영향을 주지 않습니다.)Static 옵션을 사용하면 커서를 업데이트하는 Current of 작업을 수행할 수 없습니다.
PS: 이 코드를 실행할 때 다른 창에 새 데이터를 즉시 삽입하고 수정하며 데이터를 삭제해도 현재 커서에 영향을 주지 않는다는 뜻이다.
 
Keyset 옵션
Keyset 옵션도tempdb에서 결과 집합을 캐시합니다. 메인 키만 캐시합니다.외부 수정 데이터는 메인 키를 수정할 수 없고 다른 열을 수정하는 것은 유효합니다.기본 테이블의 행이 삭제되면 @@FetchState 반환 값은 -2입니다.
PS: 이 코드를 실행할 때 다른 창에 새 데이터를 삽입하는 데 영향을 주지 않는다는 뜻이다.주 키가 아닌 데이터를 수정하면 얻을 수 있으며 데이터가 존재하지 않으면 88입니다
 
DYNAMIC 옵션
매번 가져올 때마다 즉시 업데이트, 추가, 수정, 삭제를 지원할 수 있습니다.ABSOLUTE 추출 옵션은 동적 커서 지원되지 않습니다.
FAST_FORWARD
성능 최적화가 활성화된 FORWARD 지정ONLY、READ_온리 커서.SCROLL 또는 FOR를 지정한 경우UPDATE는 FAST 도 지정할 수 없습니다.FORWARD.

좋은 웹페이지 즐겨찾기