用于更新指定的未绑定到架构的视图的元数据。由于视图所依赖的基础对象的更改,视图的持久元数据会过期。
Transact-SQL 语法约定
sp_refreshview [ @viewname = ] 'viewname'
视图的名称。viewname 的数据类型为 nvarchar,无默认值。viewname 可以是多部分组成的标识符,但只能引用当前数据库中的视图。
0(成功)或非零数字(失败)
如果创建视图时未将其绑定到架构,则对该视图下影响视图定义的对象进行更改时,应运行 sp_refreshview。否则,当查询视图时,可能会生成意外结果。
要求对视图具有 ALTER 权限,并对视图列引用的公共语言运行时 (CLR) 用户定义类型和 XML 架构集合具有 REFERENCES 权限。
以下示例刷新视图 Sales.vIndividualCustomer 的元数据。
Sales.vIndividualCustomer
USE AdventureWorks; GO EXECUTE sp_refreshview N'Sales.vIndividualCustomer';
假定表 Person.Contact 进行了更改,其更改方式影响了基于此表创建的所有视图的定义。以下示例将创建一个脚本,以便为与表 Person.Contact 有依赖关系的所有视图刷新源数据。
Person.Contact
USE AdventureWorks; GO SELECT DISTINCT 'EXEC sp_refreshview ''' + name + '''' FROM sys.objects AS so INNER JOIN sys.sql_expression_dependencies AS sed ON so.object_id = sed.referencing_id WHERE so.type = 'V' AND sed.referenced_id = OBJECT_ID('Person.Contact');