Использовать временную таблицу для объединения результатов запроса из разных БД

Мне нужно извлечь данные из разных БД в одну таблицу. Все эти БД находятся на одном сервере и экземпляре и имеют одинаковую структуру. Одним из столбцов будет имя БД, остальные - из той же таблицы.

Я мог бы написать запрос, который извлекает эти данные с таблицей для каждой базы данных, но я хотел бы объединить все результаты в одну таблицу.

Я пытался использовать временную таблицу для сохранения отдельных результатов, но в результате получается пустая таблица. Кажется, что таблица #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 и другие команды, но я думаю, что этого примера достаточно, если кто-то знает, как получить желаемый результат.

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
Другие вопросы по тегам