2016-12-29 22 views
0

我有大量包含類似數據的表(數千個)。我想從這些報告中運行一些報告。表名是相似的,所以我可以得到一個表名的列表。SQL- UNION所有大量表格

我將來可能合併這些表格,選擇工作後應該是微不足道的。

--Getting a list of all tables 
select TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_NAME LIKE 'TableNamePrefix%' 
ORDER BY TABLE_NAME 

要合併的數據,我可以使用UNION ALL,但不知道如何設置了WHILE /光標,列表不會需要不斷更新。

喜歡的東西

SELECT * FROM TableNamePrefix00001 
UNION ALL 
SELECT * FROM TableNamePrefix00002 
UNION ALL 
SELECT * FROM TableNamePrefix00003 
--And so on for all tables in the list 

任何幫助表示讚賞,感謝。

+0

使用動態SQL – xQbert

+0

得到某處先合併它們。 –

回答

0

- 我與

DECLARE @SQL nvarchar(max); 

select @SQL = COALESCE(@SQL , '') + 'SELECT * FROM [' + TABLE_NAME + '] UNION ALL ' 
FROM INFORMATION_SCHEMA.TABLES where TABLE_NAME LIKE '%employeedet%'; 

SELECT @SQL = LEFT(@SQL, LEN(@SQL) - 11); 

print @SQL; 
+0

將SELECT行更改爲下面的內容以避免尾隨UNION ALL:'select @SQL = COALESCE(@SQL +'UNION ALL','')+'SELECT * FROM ['+ TABLE_NAME +']' –

+0

我結束了由於字符限制,使用EXEC而不是打印。其他一些評論也是很好的解決方案。 – OwlsSleeping

0

所有這些表具有相同的數據類型和列數,因爲如果不是這種情況,那麼您將無法使用UNION語句,但是,以這種方式合併所有信息是非常奇怪的,您可以舉一些例子來澄清它。

+0

在猜測中,已經有一種設計,其中某個類別的數據已經被分散到僅用於該數據的表格中,例如, AccountsJan2000,AccountsFeb2000,...我已經看到了之前完成的 - 因此'我將來可能會合並這些表' – Cato

+0

是的,幾乎是這種情況。許多表格都有類似的數據,只有一個表格可以完成這項工作。 – OwlsSleeping

5

可以使用上表名的模式與動態SQL爲此

Declare @SQL varchar(max) ='' 
Select @SQL = @SQL +'Union All Select * From '+Table_Name+' ' 
    FROM INFORMATION_SCHEMA.TABLES 
    WHERE TABLE_NAME LIKE 'TableNamePrefix%' 
    ORDER BY TABLE_NAME 
Set @SQL = Stuff(@SQL,1,10,'') 
Exec(@SQL) 
1
select 'select * from '+TABLE_NAME +' union all' 
FROM 
INFORMATION_SCHEMA.TABLES 
WHERE TABLE_NAME LIKE '%chd%' 
ORDER BY TABLE_NAME 

刪除最後一個UNION ALL