SQL Server视图在更改底层依赖关系后显示过期/错误的数据

10
我们有一个基础视图X,被另外两个视图Y和Z所引用。今天我们对视图X进行了修改,然后发现视图Y和Z返回的数据不正确。在Management Studio中我们运行了代码中调用的SELECT * FROM Y,结果也是错误的。但是当我们直接运行视图中的实际SQL语句时,结果是正确的。我们尝试了很多方法,最终同事建议在视图X和Z中添加一个空格并运行Alter,这样解决了问题。一切恢复正常且运行良好。我的问题是:MSSQL是否会缓存其视图?如果是,如何强制不缓存或者重新编译呢?此外,关于这方面的更多阅读资料也将是有帮助的。
2个回答

13

请查看sp_refreshview命令。

该命令更新指定的非绑定模式视图的元数据。视图的持久化元数据可能会因为底层对象发生变化而过时。


8

SQL Server不缓存视图数据(至少不是你所指的方式)。

如果视图定义包含“SELECT *”,则实际列列表在视图创建时定义,即“SELECT *”将被实际列列表替换,这些列在创建视图时存在。这意味着,如果您向视图引用的基础表添加列,则这些列不会显示在视图中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接