sql - 为什么我们的应用程序需要刷新数据库视图?
问题描述
我们有一个由嵌套视图组成的报告生成器,以防止冗余代码。我们发现在某些情况下,我们需要sp_refreshview
在编辑较低级别的视图后“刷新”较高级别的视图(使用 )。如果我们不这样做,这些字段实际上会从嵌套视图中的错误字段返回数据。
为什么是这样?我们的团队负责人建议,这可能是因为我们在旧视图中有一些区域select *
被使用(公平地说,其中大约有 200 个)。这会导致它,还是我们可能做错了什么?
我们的数据库是 MSSQL。
解决方案
视图是使用在不刷新视图本身的情况下不会更新的架构定义创建的。因此,更新导致任何架构更改的基础表/视图将需要刷新主视图以更新视图架构。即使主视图中的逻辑保持正确,这仍然是正确的,因为它背后的模式是错误的,需要刷新。
您可以使用 创建视图SCHEMABINDING
,这将防止在视图存在时更改底层对象,从而“强制提醒”您更新视图(因为您必须先修改它或删除它,然后在您制作后重新创建它那些潜在的变化)。或者,您可以在进行更改后继续刷新视图。两者都达到相同的最终结果。
对我来说,使用哪种方法的决定取决于如果有人进行了潜在的更改并且视图没有刷新,它将产生多大的影响。
推荐阅读
- python - 使用python进行高斯拟合
- amazon-web-services - AWS CDK、ecs-patterns、ApplicationLoadBalancedFargateService、设置标签
- oop - 为什么 Dart 更喜欢省略局部变量的类型注释?
- c# - 如何格式化 DataGrid 中的单元格以在之后显示 % 符号
- html - GTranslate Wordpress 插件在手机上无法正常工作
- java - Thymeleaf 模板找不到相关的 JS、CSS 和 i18n 文件
- javascript - Firebase 功能测试初始化失败
- mybatis - mybatis 3 + spring:我可以根据查询结果中的列值将集合结果分为两组吗
- html - 安全的 HTML 到 PDF
- sql - postgres 查询优化