我有一个从显示不同数据的表中选择数据的视图。
表是dbo.user
,视图是dbo.users
(不要判断,我继承了这个系统)。观点很简单select * from table
。
如果我运行以下语句:
SELECT Field1, Field2 FROM dbo.[User] WITH (NOLOCK) ORDER BY Field1;
SELECT Field1, Field2 FROM dbo.Users WITH (NOLOCK) ORDER BY Field1;
我为其中一个字段得到不同的值。见附图:
任何想法这是如何发生的?该表是聚集的,具有 pk 和唯一索引。
创建视图时,它会绑定到执行所需的元数据。
注意: https ://msdn.microsoft.com/en-us/library/ms187821.aspx
这就是说
sp_refreshview
:“更新指定的非模式绑定视图的元数据。由于视图所依赖的基础对象的更改,视图的持久元数据可能会变得过时。”过时的元数据绑定会导致令人惊讶的“错误”结果。使用模式绑定视图是避免该问题的一种方法。
阅读 Aaron Bertrand 发布的链接: