sql server—在sql(ssms)中动态附加新表的视图

nxagd54h  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(418)

我有一个表的历史,已创建和将每月创建。他们看起来像 mytable_201501 , mytable_201502 以此类推直到 mytable ,这是时间方面的最后一个表。既然我们在五月, mytable 将成为 mytable_202004 在六月,新的 mytable 会有5月份的数据。不知道是否有一个词来形容这种设置。
现在我需要创建一个视图,将所有这些查询附加到一个视图中。
我现在的代码很简单

CREATE VIEW
SELECT * FROM mytable_201501 
UNION ALL
SELECT * FROM mytable_201502 
...
UNION ALL
SELECT * FROM mytable

这需要很大的空间,必须每月更新。我正在寻找一种方法来自动化这一点,如果有一个在sql中。

ht4b089n

ht4b089n1#

您可以通过查询sys.tables生成视图定义,如下所示:

declare @sql nvarchar(max) = 
(
    select '
    create or alter view v_mytable
    as
    '+ STRING_AGG( 'select * from ' + quotename(name) ,'
    union all 
    ')
    from sys.tables
    where name like 'mytable%'
)
print @sql 

--exec (@sql)
eblbsuwk

eblbsuwk2#

“这类设置的一个词?”“破碎”。
所有月份都应该有一个表,其中一列指定月份。为了提高性能,可以按month列对表进行分区。那么你的问题就很简单了。它可以查询它想要的月份。
曾几何时,SQLServer不支持真正的分区,表需要“分片”(因为缺少更好的术语),然后使用 union all . 那时候已经过去很久了。
鉴于你的情况,我建议你采取以下措施:
创建一个新表,就像旧表一样,为“生效日期”或“加载日期”或其他任何内容添加一列,如果合适的话,按此列进行分区。
用所有现有数据加载表。
修改为每个月创建表的作业并插入到该表中。
您也可以使用ddl触发器来代替修改作业,不过我建议您更改作业。

相关问题