sp_refreshview的功能描述为刷新指定视图的元数据由于视图所依赖的基础对象的更改视图的持久元数据会过期由于sp_refreshview的代码被封装了(没有公开)所以我们看不到它的内部实现不过看了这个存储过程的描述你是否对视图有了新的认识呢?
从这里我们可以看到当我们使用一个视图查询数据的时候其实我们是在使用视图的元数据来查询的当视图依赖的对象发生了变化以后视图的元数据就需要更新这样使用视图时才不会违背我们的意愿
知道了问题的产生的原因后那么我们在重新修改一个表或视图的脚本时我们就需要更新依赖于该对象的视图否则就会出现意想不到的错误如何找到依赖于该对象的对象(包括视图触发器存储过程)呢?SqlServer在该数据库的系统表sysdepends里记录这些依赖关系所以你可以查询该表获取你想要的信息但其实你可以通过使用系统提供的存储过程sp_depends来获取该对象的所依赖的对象(返回的第一个表)以及依赖于该对象的对象(返回的第二个表)脚本如下
查询vCustomersA的依赖的对象以及依赖于vCustomersA的对象
exec sp_depends vCustomersA
[] [] [] [] []