带视图的SQL Server存储过程 如果您已完成对基础表的架构更改:如果您已完成对表的数据更改,而不是架构更改:

问题描述

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

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

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

解决方法

如果您已完成对基础表的架构更改:

它不会自动发生。您必须专门调用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选项创建视图,这样可以避免对基础表进行模式更改。 Benefits of Schemabinding

如果您已完成对表的数据更改,而不是架构更改:

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