我们有一个由嵌套视图组成的报告生成器,以防止出现冗余代码。我们发现在某些情况下,我们需要sp_refreshview
在编辑较低级别的视图后“刷新”(使用)较高级别的视图。如果我们不这样做,则这些字段实际上将返回嵌套视图中错误字段的数据。
为什么是这样?我们的团队负责人建议,也许是因为在较旧的视图中select *
使用了一些区域(公平地讲,其中大约有200个区域)。这可能导致它吗,还是我们可能做错了其他事情?
我们的数据库是MSSQL。
使用架构定义创建视图,这些架构定义在不刷新视图本身的情况下不会更新。因此,更新引起任何架构更改的基础表/视图将需要刷新主视图,以更新视图架构。即使主视图中的逻辑保持正确,这仍然是正确的,因为其背后的模式是错误的,需要刷新。
您可以使用创建视图SCHEMABINDING
,以防止在视图存在时对基础对象进行更改,从而“强制提醒”您更新视图(因为您必须先对其进行修改或删除,然后在创建后重新创建它)这些潜在的变化)。或者,您可以在进行更改后继续刷新视图。两者达到相同的最终结果。
对我来说,使用哪种方法的决定将取决于如果某人进行了基础更改并且视图没有刷新,它将产生多大的影响。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句