我可以在视图中重命名表名吗? 我有一个视图,我需要每个月自动更新表名称。 例如;
SELECT *
FROM Feb_Data
更改为
SELECT *
FROM Mar_Data
我通过动态SQL尝试了不同的方法,但它不起作用,并且由于数据太大,我需要一个视图。我尝试过SP_RENAME
(仅适用于列或视图名称)。
或者其他任何人都可以想到一种更好的自动化方法吗?
答案 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