为什么SQL Server Views需要每隔一段时间刷新一次

Jan*_*oom 12 sql-server refresh sql-view

为什么我必须编写"刷新视图"脚本,并在每次向视图添加或编辑某些字段时执行它们?

SQL Server知道在Management Studio中的花哨的视图编辑窗口中编辑它时需要刷新视图,那么为什么在通过脚本编辑视图后它不能只是告诉它的视图进行刷新?

Eri*_*ric 10

如果基础表发生变化,则需要刷新视图.这可以更改视图列的数据类型或重新排列其索引.因此,它需要知道.否则,你会对它运行一个查询,它会很快爆炸.

您不应该sp_refreshview为改变视图而奔跑.仅用于更改其基础表.

另外,请不要嘲笑快乐的球.

编辑:只是运行此代码(连续)尝试重现您的问题.遗憾的是,我无法按预期工作(SQL Server 2008):

create view MyView
as
select ProductKey, ProductID, ProductName, Price
from dbo.Products

select v.* from MyView v

alter view MyView
as
select ProductKey, ProductID, ProductName, Price*100 as MyPrice
from dbo. Products

select v.* from MyView v
Run Code Online (Sandbox Code Playgroud)

  • 埃里克的评论仍然有效。每当基础表的架构发生更改时,即使视图的代码保持正确,也需要刷新视图的元数据。 (2认同)

gbn*_*gbn 6

在视图定义中使用WITH SCHEMABINDING可以消除任何刷新的需要

并与 ALTER VIEW 结合,而不是设计者

2012 年 7 月编辑,来自上面的链接。我的大胆

架构绑定

将视图绑定到基础表的架构。当指定 SCHEMABINDING 时,不能以影响视图定义的方式修改基表。必须首先修改或删除视图定义本身,以删除对要修改的表的依赖关系。使用 SCHEMABINDING 时,select_statement 必须包含引用的表、视图或用户定义函数的两部分名称 (schema.object)。所有引用的对象必须位于同一数据库中。

无法删除参与使用 SCHEMABINDING 子句创建的视图的视图或表,除非删除或更改该视图使其不再具有架构绑定。否则,数据库引擎将引发错误。此外,当这些语句影响视图定义时,在参与具有架构绑定的视图的表上执行 ALTER TABLE 语句也会失败。

  • 我犹豫是否提出这个建议。“WITH SCHEMABINDING”*仅*在表全部位于同一服务器上的同一数据库中时才有效。 (4认同)