自动将视图另存为带有额外列的表

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

就我个人而言,我不喜欢触发器,因为很难持续了解正在发生的事情。对于预定的作业也是如此。

我更喜欢在发生更改时从我的代码中调用更新。

【讨论】:

以上是关于自动将视图另存为带有额外列的表的主要内容,如果未能解决你的问题,请参考以下文章

带有额外视图的表视图。查看保持调整到最大

带有额外列的多对多自引用原则

无法将查询另存为视图表

自动化“另存为带有内容的 HAR”

在 HTML 表单提交后提供文件“另存为”对话框

为啥带有“额外”列的数据透视不能合并结果