将多个 SQL Server 表合并为一个
Posted
技术标签:
【中文标题】将多个 SQL Server 表合并为一个【英文标题】:Merge multiple SQL Server tables into one 【发布时间】:2020-02-19 07:33:23 【问题描述】:我在数据库中有许多 SQL Server 表,它们具有关于同一域(相同列)的信息,并且它们的名称相同,加上日期后缀 (yyyyMMdd
):
如果它们都在同一张桌子上,这似乎更有意义。有没有办法,使用查询/SSIS 或类似的东西,将这些表合并到一个 (TABLE_ABOUT_THIS_THING) 中,并使用由当前表后缀构成的新列 (extraction_date
)?
【问题讨论】:
是的。您可以编写一个INSERT
查询来做到这一点。你能展示一下你的尝试吗?
【参考方案1】:
使用 SSIS:使用联合从多表中收集数据并使用派生列作为目标之前的提取日期,您可以从以下链接获取更多信息: https://www.tutorialgateway.org/union-all-transformation-in-ssis/
【讨论】:
【参考方案2】:你可以使用UNION ALL
:
create view v_about_this_thing as
select convert(date, '20200131') as extraction_date t.*
from TABLE_ABOUT_THIS_THING_20200131
union all
select convert(date, '20201912') as extraction_date t.*
from TABLE_ABOUT_THIS_THING_20191231
union all
. . .
这恰好是partitioned view,它还有其他一些好处。
挑战在于如何保持最新状态。我的建议是修复您的数据处理,以便所有数据都放入一个表中。您还可以设置一个每月运行一次的作业,并将最新值插入现有表中。
另一种方法是每月或定期重建视图。您可以使用 DDL 触发器来执行此操作,该触发器会在新表出现时重新创建视图。
另一种选择是一次创建一年的所有表 - 但为空 - 并每年手动创建一次视图。但是在你的日历上有一个提醒你的笔记!
【讨论】:
从现在开始,所有数据都将进入一个表。我的问题是关于如何处理今天之前使用的现有表格。我正在开发一个 SSIS 包,该包连接每个表并将其添加到最终表中,该列填充了来自文件名的正确日期。如果我遇到困难,我会发布我的尝试。 @danielsto 。 . .只需将数据插入现有表即可。 这不是棘手的部分。我无法将表名的子字符串(日期部分)插入新列(extraction_date)。【参考方案3】:您可以使用 SSIS,将新表“TABLE_ABOUT_THIS_THING”作为目标,将如下所示的查询作为源:
`Select * FROM table1
UNION
Select * FROM table2
UNION
.
.
.`
【讨论】:
以上是关于将多个 SQL Server 表合并为一个的主要内容,如果未能解决你的问题,请参考以下文章
如何合并 SQL Server 中具有映射到通用描述的不同列标题的表?