我继承了一个相当实质的项目,它广泛使用sql Server(2005和2008)视图.
构建过程的一个步骤是调用sp_refreshviews系统存储过程,以确保任何表中的更改都不会破坏我们的视图.这工作很好….除了大约三四个(200个)视图….
与那些,它只是炸弹 – 给出奇怪的错误信息,如
Msg 15165,Level 16,State 1,
Procedure
sp_refreshsqlmodule_internal,Line 55
Could not find object
‘vYourViewNameHere’ or you do not
have permission.
这是错误的 – 那个视图确实存在,我绝对可以从中选择.
我似乎没有找到任何关于为什么会这样的简明扼要的信息,什么触发它…任何想法?有什么可以做的来检测这些有问题的观点吗?我可以改变他们的定义,以便他们再次刷新吗?
更新:我记录了Microsoft Connect的错误报告 – 如果您同意这似乎很奇怪,需要修正,请投票!
解决方法
我注意到你提到的评论有SCHEMABINDING.我几乎可以保证这是问题.
Books online具体说,这是用于非模式绑定视图.
方案绑定的视图不会允许发生中断更改,因此更新元数据是不必要的.你可以安全地跳过它.
您可以识别所有的schemabound视图,如下所示:
SELECT * FROM sys.views WHERE OBJECTPROPERTY(object_id,'IsSchemaBound')=1