将多个SQL Server表合并为一个表

将多个SQL Server表合并为一个表,sql,sql-server,database,ssis,Sql,Sql Server,Database,Ssis,我在一个数据库中有许多SQL Server表,这些表包含关于相同域(相同列)的信息,它们的名称相同,加上日期后缀(yyyyMMdd): 关于这件事的表\u 20200131 关于这件事的表格20191231 关于这件事的表格20191130 关于这件事的表格20191031 关于这件事的表格20190930 关于这件事的表格20190831 这似乎是更有意义的,如果它是在同一张桌子上。有没有一种方法,可以使用查询/SSI或类似的方法,将这些表合并为一个(表关于这个东西)新列(extract

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

  • 关于这件事的表\u 20200131
  • 关于这件事的表格20191231
  • 关于这件事的表格20191130
  • 关于这件事的表格20191031
  • 关于这件事的表格20190930
  • 关于这件事的表格20190831

这似乎是更有意义的,如果它是在同一张桌子上。有没有一种方法,可以使用查询/SSI或类似的方法,将这些表合并为一个(表关于这个东西)新列(
extraction\u date
),该列由当前表后缀组成?

您可以使用SSI,将新表“表关于这个东西”作为目标,并将如下所示的查询作为源:

`Select * FROM table1
UNION
Select * FROM table2 
UNION
.
.
.`

使用SSIS:将union用于从多表收集数据,并将派生列用于目标之前的提取日期。有关可从以下链接获取的更多信息,请参见:

您可以使用
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
    . . . 
这恰巧是一个很好的例子,它还有其他一些好处

面临的挑战是如何使其保持最新。我的建议是修复数据处理,使所有数据都进入一个表中。还可以设置每月运行一次的作业,并将最新值插入现有表中

另一种方法是每月或定期重建视图。可以使用DDL触发器来完成此操作,该触发器在新表出现时重新创建视图


另一种方法是一次性创建一年的所有表(但为空),并每年手动创建一次视图。但在你的日历上有一张便条提醒你

对。您可以编写一个
INSERT
查询来执行此操作。你能展示一下你的尝试吗?从现在起,所有的数据都将被放入一个表中。我的问题是如何处理今天以前使用过的现有表。我正在处理一个SSIS包,该包连接每个表并将其添加到最终表中,其中的列中填充了来自文件名的正确日期。如果我被卡住了,我会发布我的尝试。@danielsto。只需将数据插入现有的表中,这不是棘手的部分。我无法将表名(日期部分)的子字符串插入到新列(提取日期)中。