使用Temp Table合并来自不同DB的查询结果

时间:2017-10-11 09:10:04

标签: sql-server sp-executesql global-temp-tables sp-msforeachdb

我需要将来自不同数据库的数据提取到一个表中。这些DB都在相同的服务器和实例中,并且它们具有相同的结构。其中一列是DB Name,其他列来自同一个表。

我可以编写一个查询,用每个数据库的表提取这些数据,但我想将所有结果合并到一个表中。

我尝试使用临时表来保存单个结果,但结果是一个空表。似乎每次查询后表#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 个答案:

答案 0 :(得分: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