簡體   English   中英

SQL-UNION ALL大量表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM