0

MS SQL 2008 R2를 사용하여 원하는 출력을 빌드하는 데 cte를 사용하는 쿼리가 있습니다. 이 하나의 데이터베이스에 대해 잘 작동하지만 지금은 여러 데이터베이스를 통해 동일한 쿼리를 당겨 하나의 결과 집합에있는 모든 결과를 반환해야합니다. 극단적 인 세부 사항없이 내가 가진 : 이것은 나에게 내가 관련 DB 이름을 가진 첫번째 컬럼에 필요한 데이터를 제공UNION 여러 데이터베이스에서 CTE를 기반으로 SQL 쿼리가 작성되었습니다.

;with cte1 as (my query from db1), 
cte2 as (another query from cte1), 
cte3 as (yet another one from cte2) 
Select 'db1.Name' as dbName, * from cte3 

. 지금은 같은 스키마와 동일한 출력으로 30 개 이상의 데이터베이스를 통해 모든이를 실행해야하지만, 내가하려고 할 때이 :

;with cte1 as (my query from db1), 
cte2 as (another query from cte1), 
cte3 as (yet another one from cte2) 
Select 'db1.Name' as dbName, * from cte3 

Union (or Union All) 

;with cte1 as (my query from db2), 
cte2 as (another query from cte1), 
cte3 as (yet another one from cte2) 
Select 'db2.Name' as dbName, * from cte3 

Union (or Union All) 

... till we reach the 30+ 

내가 불만을 얻을 ";" 그리고 노조/노동 조합 모두. 모든 데이터베이스에서 모든 최종 SELECT 문 출력을 하나의 결과 집합으로 가져 오는 방법

답변

0

CTE

이 문제가 글로벌 임시 테이블을 만들고 테이블을 채우는 해결하기 위해 .. 이런 식으로 작동하지 않고 마지막에 선택 않습니다. 가정

즉 샘플은 열 1 열 및 2 열은 cte3이 내가 필요한 것입니다

CREATE TABLE ##result 
    (dbname varchar(50); 
     column1 varchar(50), 
     column2 varchar(50)) 


    ;with cte1 as (my query from db1), 
    cte2 as (another query from cte1), 
    cte3 as (yet another one from cte2) 

    INSERT INTO ##result (dbname ,column1 ,column2) 
    Select 'db1.Name' as dbName, * into ##result from cte3 

    ;with cte1 as (my query from db1), 
    cte2 as (another query from cte1), 
    cte3 as (yet another one from cte2) 

    INSERT INTO ##result (dbname ,column1 ,column2) 
    Select 'db1.Name' as dbName, * into ##result from cte3 


    select * from ##result ; 
+0

에서 생성 된 두 개의 글로벌 임시 테이블을 사용하여 생각하지 않았다, 감사가 있습니다. 이제 SSRS와 함께 작동시켜야합니다 :) 도와 줘서 고마워! –