我有大量包含类似数据的表(数千个)。我想从这些报告中运行一些报告。表名是相似的,所以我可以得到一个表名列表。
我将来可能会合并这些表,一旦选择有效,应该是微不足道的。
--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 :(得分: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;