自动将视图另存为带有额外列的表
Posted
技术标签:
【中文标题】自动将视图另存为带有额外列的表【英文标题】:Automatically save view as table with extra column 【发布时间】:2013-07-24 13:06:19 【问题描述】:在我的 SQL 数据库中,我有一个包含报告内容的特定数据的视图。出于存档目的,我想将该视图自动保存为表格。我用一个
创建了表SELECT * INTO t_ReportArchive FROM v_View
(Table = t_ReportArchive; View = v_View)
所以桌子很好。视图和表的列在任何时候都不会改变,只是数据在更新。我对 SQL 真的很陌生,我的问题是:是否可以运行脚本或其他东西来使用该视图中的新数据自动更新表? Update t_ReportArchive from v_View
之类的东西?
【问题讨论】:
当您说“自动”时,您是否希望将其设置为每天、每小时等更新的计时器?在这种情况下,您应该考虑创建存储过程和作业。 创建存储过程并将其设置为服务器作业 【参考方案1】:您可以在 Jobs 中安排此查询,这可以按照您想要的频率来完成,每小时、每周、每月。
请参考以下链接
http://msdn.microsoft.com/en-us/library/ms191439.aspx
问候
阿舒托什·艾莉亚
【讨论】:
【参考方案2】:您正在使用的查询会创建表并插入到表中,因此它只能使用一次。您可以在第一次手动运行以创建表包,随后您可以使用简单的插入,例如:
insert into t_ReportArchive select * FROM v_View
或者,您可以为备份运行的每一天创建一个新表,并将日期附加到该表,如下所示:
declare @backupquery varchar(100) = 'select * into t_ReportArchive'+ REPLACE(CAST(CAST(CURRENT_TIMESTAMP AS DATE) AS VARCHAR(10)),'-','_')+ ' from v_View'
exec (@backupquery)
【讨论】:
【参考方案3】:当您从表中插入/更新/删除并从那里运行 SQL 时,您可以使用触发器来运行。
http://msdn.microsoft.com/en-us/library/ms189799.aspx
就我个人而言,我不喜欢触发器,因为很难持续了解正在发生的事情。对于预定的作业也是如此。
我更喜欢在发生更改时从我的代码中调用更新。
【讨论】:
以上是关于自动将视图另存为带有额外列的表的主要内容,如果未能解决你的问题,请参考以下文章