2017-10-04 2 views
0

그래서 기본적으로 여러 개의 휘발성 테이블로 구성된 DML 문을 실행하는 보고서를 만들었습니다. 내가 만든 방식은 각각의 임시 테이블이 본질적으로 이전 버전에서 파생된다는 것입니다. 예를 들어 첫 번째 테이블에서 '제외'를 정의하는 다른 임시 테이블이있는 동안 '데이터 세트'를 정의한 다음 마지막 두 테이블의 임시 테이블에서이를 모두 결합한 다음 최종 쿼리에서 실행합니다.여러 임시 테이블을 사용하여 저장 프로 시저 만들기

이 보고서를 자동화하여 데이터를 매일 가져오고 싶지만 매크로 나 sp를 만들지는 잘 모르겠습니다. 두 접근법의 더 큰 문제점은 어떻게 각 임시 테이블을 효과적으로 활용할 수 있는가입니다. 나는 모든 테이블을 거대한 (1000+ 라인) DML 구문으로 결합하는 것에 대해 생각해 보았습니다. 그러나 설사 확실하게 거기에 더 나은 옵션이 더 있습니다.

도움을 주시면 감사하겠습니다.

+0

일일 데이터를 언급 했으므로 임시 테이블이 필요하지 않을 수 있습니다. 스테이징 테이블을 사용할 수 있습니다. 이것은 정규화 된 스키마 또는 스타 스키마의 일부가 아닌 일반 데이터베이스 테이블입니다. 그들의 목적은 ETL 프로세스의 T 부분을 돕는 것입니다. 임시 테이블을 항상 생성하는 대신 스테이징 테이블의 내용을 간단하게 대체합니다. –

+0

또 다른 대안은 전역 임시 테이블을 사용하는 것입니다. 이들은 액세스시 인스턴스화되고, 세션 로컬이며, SPOOL 대신 TEMP 사용자 공간에서 구체화됩니다. 테이블 정의는 데이터 사전에 유지되므로 보고서를 작성하기 위해 전체 SQL에 포함시키지 않아도됩니다. –

답변

0

또는 당신이 임시 테이블 대신 Common Table Expression (CTE)을 사용할 수

WITH cte1 AS 
( 
    SELECT * 
    FROM table_1 
    WHERE 
), cte2 AS 
(
    SELECT... 
    FROM cte2 
    JOIN ... 
    WHERE 
) 
... 
SELECT * 
FROM cte_n; 

한 CTE는 이전에 의존하거나 할 수는 없습니다, 당신은 또한 재귀를 사용하여 최종 쿼리의 결과를 결합 할 수 있습니다.

+0

많은 테스트를 거친 끝에 CTE가 가장 적합하다는 것을 알았습니다. 그것에서 뷰를 생성하지만 때, 나는 구문이 무엇인지 확실하지 않다, 아래 코드 : CREATE RECURSIVE VIEW db.Test_View AS , CTE 2 ( 은 CTE 2 로부터 를 선택) AS CTE 3 AS, AS CTE 1 ( CTE는 1 내지 을 선택 가 WHERE ... ... JOIN) SELECT를 ( 로부터 선택 ... 는 ... WHERE ... 를 ON JOIN)* CTE3에서 – WhimsicalWhale

관련 문제