如果存在具有这些名称的表,则执行联合

时间:2019-07-10 07:35:39

标签: sql sql-server tsql sql-server-2008

我有一个考勤数据库,每个月都会生成一个新表 像TRNS0419,TRNS0519,TRNS0619,TRNS0719。为了合并数据,我使用了联合。 但是每个月我都要手动输入表名,如果生成新表时TRANS0819

我尝试使用所有联合,但它的isnt取用表不存在。

Select * from TRNS0419 union all Select * from TRNS0519
union all Select * from TRNS0619 union all Select * from TRNS0719

我的查询没有使用union all Select * from TRNS0819,因为这在数据库中不可用

它应该组合所有表并在find temp表中显示结果。 请帮助

1 个答案:

答案 0 :(得分:4)

在存储过程中包装以下代码:

for url in info[put_the_name_of_the_url_column_here]: # or info.iloc[:,0] as proposed by serge

DECLARE @DynamicTSQLStatement NVARCHAR(MAX); SELECT @DynamicTSQLStatement = STUFF ( ( SELECT N' UNION ALL SELECT * FROM ' + '[' + SCHEMA_NAME([schema_id]) + '].[' + [name] + ']' FROM [sys].[tables] WHERE [name] LIKE 'TRNS%' FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1 ,10 ,'' ); EXEC sp_executesql @DynamicTSQLStatement; 视图中提取表名时,您可以添加更多过滤器。