在SQL Server中将历史记录表自动添加到视图中

在SQL Server中将历史记录表自动添加到视图中,sql,sql-server,tsql,Sql,Sql Server,Tsql,我们有一个历史视图,其中有2011年、2012年、2017年的表格 到2018年时,我们需要将2018表添加到视图中 该表的定义如下所示: create view v_a as select id, name, 1 from 2011 union all select id, name, 1 from 2012 .... union all select id, name, 1 from 2017 我想把视图改为 create view v_a as

我们有一个历史视图,其中有2011年、2012年、2017年的表格

到2018年时,我们需要将2018表添加到视图中

该表的定义如下所示:

create view v_a
as 
   select id, name, 1 from 2011
   union all
   select id, name, 1 from 2012
   ....
   union all
   select id, name, 1 from 2017
我想把视图改为

create view v_a
as 
    select id, name, 1 from 2011
    union all
    select id, name, 1 from 2012
    ....
    union all
    select id, name, 1 from 2017
    union all
    select id, name, 1 from 2018

如何使用自动脚本实现它?

您可以使用“运行一次”计划设置SQL代理作业?或者创建一个windows任务计划程序任务,该任务启动一个批处理脚本,该批处理脚本调用更新数据库的PowerShell脚本

必须创建运行以下SQL命令(动态生成命令)的SQL代理作业:

将@intCurrentYEAR声明为整数
将@initialyear声明为整数
声明@strQuery VARCHAR(最大值)
选择@intCurrentYEAR=YEAR(GETDATE())
设置@initialyear=2011
设置@strQuery='alterview v_a为select id,name,1 from['+CAST(@initialyear为VARCHAR(4))+']'
设置@initialyear=@initialyear+1

而@initialyear传统的解决方法是创建历史记录表,直到您的退休/退出日期,然后立即将它们添加到视图中。不完全是“最佳实践”。@wison欢迎使用Stackoverflow,请随意阅读,了解更多关于提问、接受答案和其他功能的信息。还有让你的“知情”徽章是的。我可以设置作业来调用脚本。但是我不知道如何实现逻辑?@JeffreyVanLaethem你是对的,我提供了一个可以从SQL代理作业执行的SQL查询。看一看。你为我节省了很多时间
DECLARE @intCurrentYEAR as INTEGER
DECLARE @intInitialYEAR as INTEGER
DECLARE @strQuery VARCHAR(MAX)

SELECT @intCurrentYEAR = YEAR(GETDATE())
SET @intInitialYEAR = 2011


SET @strQuery = 'Alter view v_a as select id,name,1 from [' + CAST (@intInitialYEAR AS VARCHAR(4)) + '] '

SET @intInitialYEAR = @intInitialYEAR + 1

WHILE @intInitialYEAR <= @intCurrentYEAR
BEGIN

SET @strQuery = @strQuery + ' UNION ALL select id,name,1 from [' + CAST (@intInitialYEAR AS VARCHAR(4)) + '] '

SET @intInitialYEAR = @intInitialYEAR + 1


END

EXEC(@strQuery)