SQL-UNION ALL包含大量表

时间:2016-12-29 16:57:00

标签: sql sql-server

我有大量包含类似数据的表(数千个)。我想从这些报告中运行一些报告。表名是相似的,所以我可以得到一个表名列表。

我将来可能会合并这些表,一旦选择有效,应该是微不足道的。

--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

感谢任何帮助,谢谢。

4 个答案:

答案 0 :(得分:6)

您可以使用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)

答案 1 :(得分:1)

select 'select * from  '+TABLE_NAME +' union all'
FROM
 INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE '%chd%'
ORDER BY TABLE_NAME

删除最后一个联合

答案 2 :(得分:0)

所有这些表都具有相同的数据类型和列数,因为如果不是这种情况那么你将无法使用UNION语句,但是,以这种方式合并所有信息是非常奇怪的你能举一些例子来澄清吗。

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