SQL-我可以在视图中重命名表名吗?

SQL-我可以在视图中重命名表名吗?,sql,view,rename,Sql,View,Rename,我可以在视图中重命名表名吗? 我有一个视图,我需要每月自动更新表名。 比如, SELECT * FROM Feb_Data 改为 SELECT * FROM Mar_Data 我通过动态SQL尝试了不同的方法,但它不起作用,我需要一个视图,因为数据太大了。我尝试了SP_RENAME(这仅适用于列或视图名称) 或者其他人能想出一个更好的方法来实现自动化吗 一种方法是编写一个存储过程,其中包含一个动态的alterview语句,根据所需的月份名称设置表名。然后设置一个作业,在每月的第一天午夜运行该

我可以在视图中重命名表名吗? 我有一个视图,我需要每月自动更新表名。 比如,

SELECT *
FROM Feb_Data
改为

SELECT *
FROM Mar_Data
我通过动态SQL尝试了不同的方法,但它不起作用,我需要一个视图,因为数据太大了。我尝试了
SP_RENAME
(这仅适用于列或视图名称)


或者其他人能想出一个更好的方法来实现自动化吗

一种方法是编写一个存储过程,其中包含一个动态的
alterview
语句,根据所需的月份名称设置表名。然后设置一个作业,在每月的第一天午夜运行该过程

大致如下(基本上只是伪代码):

最好的解决方案是将数据库重新组织为一个表,而不是每月一个表(可能使用视图来模拟旧的每月表结构),但如果这不是一个选项

没有动态SQL的一个选项是选择联合中的所有表,并按当前日期进行筛选

SELECT *
FROM Jan_Data
WHERE MONTH(GETDATE()) = 1
UNION ALL
SELECT * 
FROM Feb_Data
WHERE MONTH(GETDATE()) = 2
...
(我对性能没有任何承诺;这纯粹是为了便于维护,但优化器可能会考虑任何性能问题)


作为旁注,年底会发生什么?Jan_数据是否被替换?仅按月份(而不是按年份)使用单独的表似乎是非常有限的。

如果对象名称是动态的,则需要动态SQL。首选的替代方法是,首先不要将数据划分到月表中,而是查询带有日期列的单个表。您使用的是哪种产品?“SQL”只是一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加标签,
postgresql
oracle
db2
sql server
,…索引或分区是解决性能问题的更好的方法,这就不需要解决这一棘手的问题。我很高兴它有所帮助。谢谢
SELECT *
FROM Jan_Data
WHERE MONTH(GETDATE()) = 1
UNION ALL
SELECT * 
FROM Feb_Data
WHERE MONTH(GETDATE()) = 2
...