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

时间:2019-03-18 16:13:10

标签: sql view rename

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

SELECT *
FROM Feb_Data

更改为

SELECT *
FROM Mar_Data

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

或者其他任何人都可以想到一种更好的自动化方法吗?

2 个答案:

答案 0 :(得分:1)

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

不使用Dynamic SQL的一个选项是选择UNION中的所有表并按当前日期进行过滤

SELECT *
FROM Jan_Data
WHERE MONTH(GETDATE()) = 1
UNION ALL
SELECT * 
FROM Feb_Data
WHERE MONTH(GETDATE()) = 2
...

(我对性能不做任何保证;这纯粹是为了易于维护,但是优化程序可以解决任何性能问题)

请注意,今年年底会发生什么? Jan_Data是否被替换?仅按月(而不按年)有单独的表似乎是非常有限的。

答案 1 :(得分:0)

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

遵循这些原则(几乎只是伪代码):

CREATE PROCEDURE dbo.AlterViewWithMonthlyTableNames
AS

BEGIN

  DECLARE @TableName SYSNAME = CONCAT(CAST(GETDATE() AS NCHAR(3)),'_Data')
         ,@SQL NVARCHAR(1000);

  SET @SQL = CONCAT
    (
    'ALTER VIEW dbo.YourView
      AS
      SELECT *
      FROM ', QUOTENAME(@TableName),';'
    );

  EXEC sp_executesql @SQL;

END