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