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