我有一个已创建表的历史记录,并将每月创建。它们看起来像mytable_201501
,mytable_201502
等,直到mytable
,这是时间上的最后一个表。因此,由于我们在5月,mytable
将在6月变为mytable_202004
,而新的mytable
将具有5月的数据。不知道这种设置是否有用。
现在,我需要创建一个视图,它将所有这些查询附加到一个视图中。
我当前的代码很简单
CREATE VIEW
SELECT * FROM mytable_201501
UNION ALL
SELECT * FROM mytable_201502
...
UNION ALL
SELECT * FROM mytable
这会占用大量空间,并且每个月都必须进行更新。我正在寻找一种方法来自动执行此操作(如果SQL中有一个)。
您可以通过查询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)