9

我们有一个视图(称为 X),它是由其他 2 个视图(称为 Y 和 Z)调用的基本视图。

今天我们对视图 X 进行了更改,之后视图 Y 和 Z 开始带回不正确的数据。当我们在 Management Studio 中运行时SELECT * FROM Y(这正是在代码中调用视图的方式),它会返回不正确的数据。但是,当我们运行视图包含的实际 SQL 时,它就很好了。我们尝试了很多方法,直到一位同事建议添加一个空间来查看 X 和 Z,然后运行 ​​Alter,它奏效了。一切恢复正常并运行良好。

我的问题是:MSSQL 是否缓存其视图?如果是这样,你如何强迫他们不要或强迫他们重新编译?

此外,任何关于此的额外阅读都会有所帮助。

4

2 回答 2

11

请参见sp_refreshview命令。

更新指定的非模式绑定视图的元数据。由于视图所依赖的底层对象的更改,视图的持久元数据可能会变得过时。

于 2008-12-16T23:26:08.477 回答
8

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

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

于 2008-12-16T23:19:06.993 回答