为什么需要在一段时间刷新一次每个SQL Server视图
-
13-09-2019 - |
题
为什么我写的“刷新视图”脚本,并执行它们每次我添加时间或修改某些字段的看法?
SQL Server可以理解,它需要在Management Studio中看中视图编辑窗口编辑时,它刷新视图,所以为什么不能只是告诉其观点,要经过脚本编辑视图后刷新自己?
解决方案
视图需要刷新如果底层表改变的。这可以更改视图的列的数据类型或重新安排其索引。因此,它需要知道。否则,你对它运行一个查询,它会很快炸毁。
您不应该用于改变视图下执行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
其他提示
使用 WITH SCHEMABINDING 在视图定义,以除去不需要任何刷新
和与ALTER VIEW组合,而不是设计者
编辑,2012年7月,从上面的链接。我的粗体
SCHEMABINDING
将视图绑定到底层或多个表的模式。当指定SCHEMABINDING是,基座或多个表的不能的方式会影响视图定义改性即可。视图定义本身必须首先被修饰或下降到上待修改的表中删除依赖关系。当您使用SCHEMABINDING时,select_statement中必须包括表,视图或引用用户定义函数的两部分名称(为schema.object)。所有被引用的对象必须在同一数据库中。
这参加与SCHEMABINDING子句的创建的视图的视图或表,除非该视图被丢弃或改变,使得它不再具有架构绑定不能删除即可。否则,数据库引擎将引发错误。此外,执行的 ALTER对参与具有架构绑定视图表TABLE语句失败强>当这些语句影响视图定义
不隶属于 StackOverflow