좀더 공부를 해 봐야 하겠지만...
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 덕분에 여러번 인서트해야만 했던, 그래서 수만 시간 걸려야 했던 작업을 순식간에 처리할 수 있을 것 같습니다.
'DATABASE > MS SQL' 카테고리의 다른 글
[MS SQL] 날짜 조회 쿼리 (0) | 2013.04.30 |
---|---|
[MS SQL] MS SQL Server 2005를 설치하다가 이런 메시지를 받았다면.... (0) | 2010.03.19 |
[MS SQL] Vista 나 Windows2008 Server 에서 Error 1075 번 에러를 만났다면... (0) | 2010.03.19 |
[MS SQL] SQL Server 2000 성능 데이터 보기 (0) | 2009.12.15 |
[MS SQL] Linked DB 생성 (0) | 2009.11.03 |