将多个 SQL Server 表合并为一个

Posted

技术标签:

【中文标题】将多个 SQL Server 表合并为一个【英文标题】:Merge multiple SQL Server tables into one 【发布时间】:2020-02-19 07:33:23 【问题描述】:

我在数据库中有许多 SQL Server 表,它们具有关于同一域(相同列)的信息,并且它们的名称相同,加上日期后缀 (yyyyMMdd):

TABLE_ABOUT_THIS_THING_20200131 TABLE_ABOUT_THIS_THING_20191231 TABLE_ABOUT_THIS_THING_20191130 TABLE_ABOUT_THIS_THING_20191031 TABLE_ABOUT_THIS_THING_20190930 TABLE_ABOUT_THIS_THING_20190831 ...

如果它们都在同一张桌子上,这似乎更有意义。有没有办法,使用查询/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 中具有映射到通用描述的不同列标题的表?

SQL Server如何将Id相同的字段合并,并且以逗号隔开

sql server 语句如何将3个表合并成一个表?

SQL怎样合并显示两个没有关联的表

sql server 在不匹配时与多个插入合并

SQL 2012 将来自多个表的多个查询与连接和计数合并到一个表中