首页 > 解决方案 > 带有视图的 SQL Server 存储过程

问题描述

我使用存储过程更改了表中的一些条目,这些更改会影响视图。

什么时候更新视图?存储过程何时工作(在特定语句之后)或何时完成?

我正在使用 SQL Server 2019 (v15)。

标签: sqlsql-serverstored-proceduressql-view

解决方案


如果您对基础表进行了架构更改:

它不会自动发生。您必须专门调用sp_refreshsqlmodule来刷新视图

EXEC sp_refreshsqlmodule 'SchemaName.ViewName'

sp_refreshsqlmodule 应在对影响其定义的模块下的对象进行更改时运行。否则,模块在查询或调用时可能会产生意想不到的结果。要刷新视图,您可以使用 sp_refreshsqlmodule 或 sp_refreshview 来获得相同的结果。

您还可以使用sp_refreshview刷新基础更改的视图。

EXEC sp_refreshview N'SchemaName.ViewName'

如果视图不是使用模式绑定创建的,则当对视图下的对象进行了影响视图定义的更改时,应该运行 sp_refreshview。否则,视图在查询时可能会产生意想不到的结果

通常最好的做法是创建带有SCHEMA BINDING选项的视图,这将避免对基础表的架构更改。模式绑定的好处

如果您对表进行了数据更改,而不是架构更改:

视图不过是一个存储的 SQL 语句。这是一个虚拟表。当您从视图中选择时,相应的表查询将在运行时运行。View 没有单独存储数据。因此,无需更新或刷新视图。


推荐阅读