我有一个考勤数据库,每个月都会生成一个新表
像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表中显示结果。 请帮助
答案 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;
视图中提取表名时,您可以添加更多过滤器。