2011-03-14 8 views
9

범위의 시작 번호와 끝 번호가있는 행이있는 테이블이 있습니다.숫자 범위의 임시 테이블 만들기

key  startID  endID 
1   500  505 
2   784  788 
3   802  804 

등등 ..

내가 임시 테이블을 만들 싶습니다

(또는 테이블 변수/CTE 등)이 숫자와 그들 사이의 커버 범위의 각각에 대해 행이 - 즉,

ID 
500 
501 
502 
503 
504 
505 
784 
785 
786 
787 
788 
802 
803 
804 

는 사람이를 달성하기 위해 빠르고 쉬운 방법의 방향으로 날 지점 수 : 나는 다음과 같은 행이있는 테이블을보고 싶습니다 위의 예 주어진? 어떻게 든 번호 테이블을 사용하는 것에 대해 생각했지만 200m 이상의 행을 가지고있는 테이블은 커다란 숫자 테이블을 가지고 있지 않습니다!

도움을 주시면 감사하겠습니다. 미리 감사드립니다.

답변

12
WITH q AS 
     (
     SELECT startId, endId 
     FROM ranges 
     UNION ALL 
     SELECT startId + 1, endId 
     FROM q 
     WHERE startId < endId 
     ) 
SELECT startId 
FROM q 
OPTION (MAXRECURSION 0) 
+0

놀라워요! 감사! – LNote

+0

@LNote : 환영합니다. 원하는 경우 답변을 수락 된 것으로 확인하십시오. – Quassnoi

+0

네 - 당신은 너무 빨랐으며, 허락을 받기까지 3 분을 기다려야했습니다! 다시 한번 감사드립니다. – LNote

4

MSSQL에서는 임의의 큰 테이블에서 select를 사용할 수도 있습니다. syscolumns가 그 예입니다. 행이 충분하지 않은 경우 교차 가입을 할 수 있습니다.

SELECT  TOP 10000 
ROW_NUMBER() OVER (ORDER BY c1.id) 
FROM   syscolumns AS c1 
CROSS JOIN syscolumns AS c2