[MS SQL 2005]CTE 기능을 아십니까?
좀더 공부를 해 봐야 하겠지만...
Oracle 에만 있던 기능을 찾던 중 2005에서 제공하기 시작한 CTE 기능을 알게 되었습니다.
= 아래 쿼리는 www.datasarang.net 사이트에서 발췌했습니다.
WITH MYCAL AS 
( 
 SELECT 
  CAST('1900-01-01' AS DATETIME) DT
  , IDX = 1
 UNION ALL 
 SELECT 
  DT + 1 
  , IDX + 1
 FROM MYCAL 
 WHERE 
  DT + 1 <= '2050-12-31' 
) 
SELECT 
   IDX
 , [DT]
 , [DT_1]  = DATEADD(DD, -1, DT) 
 , [YMD]   = CONVERT(CHAR(8), DT, 112)
 , [YY]   = DATEPART(YEAR, DT) 
 , [MM]   = DATEPART(MONTH, DT)
 , [DD]   = DATEPART(DAY, DT)
 , [WKDAY_SEQ] = DATEPART(DW, DT)  
 , [QTR]   = DATEPART(QQ, DT) 
 , [ANIMAL]  = CASE DATEPART(YEAR, DT) % 12 - 3 
      WHEN 1 THEN '자' WHEN 2 THEN '축' WHEN 3 THEN '인' 
      WHEN 4 THEN '묘' WHEN 5 THEN '진' WHEN 6 THEN '사'
      WHEN 7 THEN '오' WHEN 8 THEN '미' WHEN 9 THEN '신' 
      WHEN 10 THEN '유' WHEN 11 THEN '술' WHEN 12 THEN '해' END
FROM MYCAL 
OPTION (MAXRECURSION 0) 
이 쿼리를 MS SQL 2005 에서 돌려보시기 바랍니다.
저는 위 기능을 이렇게 사용했습니다.
WITH MYCAL AS 
( 
 SELECT 
  CAST('37001' AS int) DT
  , IDX = 1
 UNION ALL 
 SELECT 
  DT + 1 
  , IDX + 1
 FROM MYCAL 
 WHERE 
  DT + 1 <= '87100' 
) 
insert into insertTest
SELECT 
   IDX
, DT, cast(IDX as varchar) + '_' + cast(DT as varchar) IDVALUE
FROM MYCAL 
OPTION (MAXRECURSION 0) 
아핫... ㅋㅋ
5만백건... 단 2초에 들어갑니다. 
좋아좋아...
행복한 하루입니다.
행복한 고수되셔요...
woojja ))*
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Datasarang 덕분에 여러번 인서트해야만 했던, 그래서 수만 시간 걸려야 했던 작업을 순식간에 처리할 수 있을 것 같습니다.