在SQL Server中将历史记录表自动添加到视图中
我们有一个历史视图,其中有2011年、2012年、2017年的表格 到2018年时,我们需要将2018表添加到视图中 该表的定义如下所示:在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
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)