[英]SQL- UNION ALL a large number of tables
我有大量包含相似數據的表(數千個)。 我想從中運行一些報告。 表名相似,因此我可以獲得表名列表。
將來我可能會合並這些表,一旦選擇成功,這將是微不足道的。
--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
任何幫助表示贊賞,謝謝。
您可以使用Dynamic 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)
select 'select * from '+TABLE_NAME +' union all'
FROM
INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE '%chd%'
ORDER BY TABLE_NAME
全部刪除最后一個聯合
所有這些表都具有相同的數據類型和列數,因為如果不是這種情況,那么您將無法使用UNION語句,但是,以這種方式合並所有信息是很奇怪的,您能舉一些例子嗎?澄清一下。
在表格名稱上使用您的模式-我在某處
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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.