2008-11-04 6 views
0

나는 이런 식으로 뭔가를 시도하고있다 :SQL 테이블을 순환하여 결과를 병합하는 방법은 무엇입니까?

while @nrOfAuthlevels >= @myAuthLevel 
begin 
    set @myAuthLevel = @myAuthLevel + 1 
    SELECT  Role.name, Role.authorityLevel 
    FROM  [dbo].[Role] 
    ORDER BY Role.authorityLevel 
end 

이 저장 프로 시저의 결과를 내 자신의 아래에있는 모든 Role.authorityLevel있는 테이블이어야한다. 그러나 이것은 여러 테이블을 생성합니다. 사전에

감사

브롬 크리스토퍼

+0

당신은 절차 적 언어로 SQL 생각할 수 없습니다 만 기대 수익 결과를 얻을 수있는 절을 사용하지 왜 말했다

. 당신은 Sql에게 당신이 원하는 것을 얻는 법을 말하지 않는다. (A와 B를하고 C를 돌려라.) 당신이 원하는 것을 말해 준다. (이것과 비슷한 레코드를 원하지만 그와 같은 것을 원하지 않는다.) – Will

+0

SQL에서 루핑한다. 당신은 세트에서 생각하지 않고 SQL은 세트에서 생각하는 것입니다 (이것은 대략 Will이 말한 것입니다). –

답변

1

루프 전에 임시 테이블을 만들고 데이터를 선택하지 않지만,이 임시 테이블에 데이터를 삽입 :

create table #tmp (
Name type, 
authorityLevel type 
) 

while @nrOfAuthlevels >= @myAuthLevel 
begin 
     set @myAuthLevel = @myAuthLevel + 1  
     insert into #tmp values(
      SELECT   Role.name, Role.authorityLevel 
      FROM  [dbo].[Role] 
      where ... 
     ) 
end 
+0

스티븐의 대답과 결합하면 좋은 결과를 얻을 수 있습니다. –

6

당신이 원하는 경우 그 현재 구조를 유지하려면 while 루프를 통해 모든 단계에 대한 임시 테이블에 삽입하고 TEMP 테이블에서 반환하지 않아야합니다.

SELECT Role.Name, Role.AuthorityLevel 
    FROM dbo.Role 
    WHERE Role.AuthorityLevel < @MyAuthLevel 
    ORDER BY Role.AuthorityLevel 
+0

당신이 맞습니다. 나는 원래 선택이 어쨌든 where 절을 놓쳤기 때문에 더 많은 것이 있다고 생각했습니다. 나는 그것을 모범 또는 의사 코드로 보았다. – Biri

관련 문제