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

问题描述 投票:1回答:2

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

SELECT *
FROM Feb_Data

改成

SELECT *
FROM Mar_Data

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

或者其他人可以想出更好的自动化方法吗?

sql view rename
2个回答
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

1
投票

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

没有动态SQL的一个选项是选择UNION中的所有表并按当前日期过滤

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

(我对性能没有任何承诺;这纯粹是为了便于维护,但优化器可能会考虑任何性能问题)

作为旁注,年底会发生什么? Jan_Data会被取代吗?仅按月(而非按年)分开表似乎是非常有限的。

© www.soinside.com 2019 - 2024. All rights reserved.