mssql 테이블 변수 사용해서 커서 대체


테이블 변수는 쿼리가 실행되는 세션안에서만 유효하며 일반 변수와 같다.

커서(CURSOR)보다는 임시 테이블(#TEMPTABLE) 이 

임시테이블 보다는 테이블 변수(@TEMPTABLE)를 사용하는 것이 성능에 좋다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
DECLARE @TAMP_T TABLE      
(    
 TMPID INT IDENTITY(1,1) NOT NULL,
 ID INT,
 NAME VARCHAR(20)
)  
 
 
INSERT INTO @TAMP_T(ID,NAME)
SELECT ID,NAME FROM DATATABLE
   
DECLARE @TMPID AS INT, @MAXID AS INT
DECLARE @ID INT
DECLARE @NAME VARCHAR(20)
SELECT @TMPID = MIN(TMPID), @MAXID = MAX(TMPID) FROM @TAMP_T  
 
WHILE @TMPID <= @MAXID      
BEGIN      
  --ROW  
  SELECT  
    @ID = ID,  
    @NAME = NAME
  FROM @TAMP_T      
  WHERE TMPID = @TMPID    
   --INSERT
   --UPDATE
   --DELETE
   --SELECT
  --WHERE ID = @ID AND NAME = @NAME
 SET @TMPID = @TMPID + 1      
END
cs


+ Recent posts