2012-08-03 1 views
0

현재 (잠재적으로) 대용량 데이터 집합을 반환하는 저장 프로 시저가 있습니다. 그것은이 같은 모습 때문에이 데이터는 재귀 호출에서이다 : 그 거래의 너무 크지도 않고, 그래서사례에서 SQL 반환 대 테이블 만들기

With Hierarchy as(

SELECT distID as D, [Name] as N, enrolling as E, parent_code as P, 
     FROM sales_reps 
     WHERE enrolling = @dist_ID 
     UNION ALL 
      SELECT 
      t.distID as D, t.[Name] as N, t.enrolling as E, t.parent_code as P 
     FROM sales_reps t 
      INNER JOIN Hierarchy h ON t.enrolling = h.D 
) 
SELECT *, CASE WHEN P > 5 Then 1 Else 0 END As Q 
From Hierarchy 

확인, 문제는 내가 더 많은 데이터를 사용할 필요가 여러 일을 할 것입니다 지금 몇 분 동안 이것에 대한 질문. 그래서 계획은 때로는 (현재 기능을 깨지 않기 위해) 나중에 삭제 될이 데이터가있는 테이블을 생성하는 것입니다.

내가 좋아하는 뭔가를 시도하고있다 :

CASE @temp_Table 
    WHEN IS NULL 
     Select * FROM retTable 
    ELSE 
     SELECT INTO @temp_Table 
     * FROM retTable 
End 

을하지만 그것은 나를 retTable 또는 case 문 같은 결과를 이름을 수 있도록 얻을 수 없습니다. 저는 이것이 이것이 성명서의 적절한 사용이라고 생각하지 않지만, 그 밖의 무엇을 사용해야할지 모르겠습니다.

답변

0

저장 프로 시저간에 데이터를 공유하는 방법에 대해 알아 본 최고의 텍스트입니다. 거기에 많은 정보이지만 읽기 가치 :

http://www.sommarskog.se/share_data.html

당신은 몇 가지 옵션이있다을 테이블에 데이터를 저장하고 싶은 시나리오를 얼마나 자주과에서 자세한 내용을 알 수 없음 사용할 수있다.

이 정보를 한 곳에서 저장하기 만하면 간단한 INSERT-EXEC이 도움이 될 수 있습니다. 당신은 당신이 호출 변경 될 수 있습니다, 당신은 당신이 더 많은 장소에서이 출력을해야합니다 생각한다면 (나는 hierarchy_stored_proc를 호출하고 있습니다) 호출 된 프로 시저의 출력

CREATE TABLE #results (...) 
INSERT INTO #results 
EXEC hierarchy_stored_proc 

일치 호출 프로 시저에서 임시 테이블을 만들 프로 시저를 사용하여 항상 임시 테이블에 데이터를 쓰고, select 문을 통해 결과 집합을 반환해야하는지 나타내는 매개 변수를 proc에 추가합니다. 해당 프로 시저의 기본값을 1로 설정하면 기존 기능이 영향을받지 않습니다. 다음과 같음 :

WITH Hierarchy AS (...) 
INSERT INTO #results 
SELECT ... 

IF @returnResults=1 
    SELECT * FROM #results 
관련 문제