0

다른 DB의 데이터를 단일 테이블로 추출해야합니다. 이 DB는 모두 동일한 서버 및 인스턴스에 있으며 동일한 구조를 가지고 있습니다. 열 중 하나는 DB 이름이고 다른 열은 동일한 테이블에서옵니다.임시 테이블을 사용하여 다른 DB의 쿼리 결과를 병합

각 데이터베이스의 테이블을 사용하여 이러한 데이터를 추출하는 쿼리를 작성할 수 있지만 모든 결과를 단일 테이블로 병합하고 싶습니다.

단일 결과를 저장하기 위해 임시 테이블을 사용하려고했지만 결과가 빈 테이블입니다. 테이블 #tmpTable은 각 쿼리 후에 비워진 것으로 보입니다. 여기 내 시도를 게시 :

CREATE TABLE [dbo].#tmpTable ([DbName] VARCHAR(MAX), [Example] VARCHAR(MAX)) 

EXECUTE sp_MSForEachDB 
    'USE ?;  
    DECLARE @ExampleQuery AS NVARCHAR(MAX) = 
      ''SELECT DB_NAME() AS [DbName], [Example] 
       INTO #tmpTable 
       FROM [tConfig]'' 
    EXEC sp_executesql @ExampleQuery;' 

SELECT * FROM #tmpTable 

DROP TABLE #tmpTable 

실제 쿼리가 더 복잡하고 PIVOT 및 기타 명령을 사용하여,하지만 누군가가 원하는 결과를 얻을하는 방법을 알고있는 경우이 예제는 충분하다 생각합니다.

+0

문제가 #TempTable이 비어 있다면 ## TempTable도 작동하지 않습니까? –

+0

@Stephen 시도해 보았지만 오류가 발생했습니다 :'데이터베이스에 ## tmpTable이라는 객체가 이미 있습니다 .' –

+0

먼저 #temptable을 생성하기 때문에, 당신의 앞에 # INSERT INTO # TempTable이 필요합니다. 'SELECT' 문. –

답변

1
CREATE TABLE [dbo].#tmpTable ([DbName] VARCHAR(MAX)) 

EXECUTE sp_MSForEachDB 
    'USE ?;  
    DECLARE @ExampleQuery AS NVARCHAR(MAX) = 
      ''INSERT INTO #tmpTable SELECT DB_NAME() AS [DbName] '' 
    EXEC sp_executesql @ExampleQuery;' 

SELECT * FROM #tmpTable 
DROP TABLE #tmpTable 
관련 문제