sql - 带有视图的 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
选项的视图,这将避免对基础表的架构更改。模式绑定的好处
如果您对表进行了数据更改,而不是架构更改:
视图不过是一个存储的 SQL 语句。这是一个虚拟表。当您从视图中选择时,相应的表查询将在运行时运行。View 没有单独存储数据。因此,无需更新或刷新视图。
推荐阅读
- jquery - Bootstrap 多选不适用于剔除绑定
- tsql - 在 TSQL 中将 DD-MM-YYYY 转换为 datetype
- delphi - Delphi 蓝牙 LE 心率配置文件访问
- google-cloud-storage - 如何解决 Google Cloud SQL 中的“政策已被另一个进程修改”错误?
- curl - Hashicorp vault Curl 命令一次加密超过 1 个值
- automated-tests - 空手道 - 多个场景在一个功能中运行 - 参考错误(重试)
- angular - 在 Angular 9 中迁移到 Jest 会出现“未定义区域”错误
- apache-kafka - 使用文件 (Curl) 在 Kafka Schema Registry 中创建一个新条目
- mysql - 如何解决 mysql (errno: 135 "No more room in record file") — 请检查包含数据库的目录的权限
- javascript - 传单地图:点击更改所有标记的颜色