2016-12-15 44 views
0

我们有一个可怕的设计数据库,其中有一些程序,每周都会生成新表格,并且已经这样做了几年。它有一个SQL脚本,通过对各种表格的查询获取200列以上的数据,将其全部转储到一个名为Selections的表中,然后在完成后,您必须每周手动重命名该表(Selections_Week001,Selections_Week002等)。现在我们有大约100多张桌子。我想要做的就是把所有的数据放到一张表中,列中有一列指明其原始源表(001,002等),这样我就可以摆脱所有这些单独的表。有没有办法使用一些SQL脚本来做到这一点,或者我将不得不手动编辑并运行100个附加查询?将表格组合成一个

+1

你可以在一个查询中将它们全部结合在一起,并执行一次插入,但是如果你有大量数据正在进行,那么这将成为一个杀手。我会创建一个脚本,每次都可以创建一个表格(您可以轻松地在Excel中创建大量脚本)。我更喜欢通过一次性的方法来控制这个问题 –

+0

我的观点:我会考虑使用一些脚本语言来实现这一点,因为动态sql是不必要的繁琐。 – AndreasT

+0

我只是希望写一些能动态获取每个表名并自动为所有表添加附加内容,而不必重写它100次 –

回答

1

试试这个对我来说,测试数据运行良好:

select * 
into Selections_Total 
from Selections_Week001 
where 1=0 
alter table Selections_Total 
add Original_Table varchar(64) 

--select * From Selections_Total 

declare @sql varchar(max) 
select @sql = COALESCE(@sql + ' UNION ALL select *, ''' + name + ''' from ', 'select *, ''' + name + ''' from ') + name 
from sys.tables where name like 'Selections_Week%' 

--select @sql 
insert into Selections_Total 
exec(@sql) 

UPD:起初错过with a column indicating its original source table。现在修复。

+0

”'哪里1 = 0'“---这应该做什么? – WillardSolutions

+0

从表中选择0行只复制结构 –

+0

不错,在我的桌子上运行良好,感谢您的帮助,Andrey! –