sp_refreshview (Transact-SQL)
适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例
用于更新指定的未绑定到架构的视图的元数据。 由于视图所依赖的基础对象的更改,视图的持久元数据会过期。
语法
sp_refreshview [ @viewname = ] 'viewname'
[ ; ]
参数
[ @viewname = ] 'viewname'
视图的名称。 @viewname为 nvarchar,没有默认值。 @viewname可以是多部分标识符,但只能引用当前数据库中的视图。
返回代码值
0
(成功)或非零数(失败)。
注解
如果未使用 SCHEMABINDING 创建视图, sp_refreshview
则应在对视图基础的对象进行更改时运行,这会影响视图的定义。 否则,在查询视图时可能会生成意外结果。
权限
要求对视图具有 ALTER 权限,并对视图列引用的公共语言运行时 (CLR) 用户定义类型和 XML 架构集合具有 REFERENCES 权限。
示例
A. 更新视图的元数据
以下示例刷新视图 Sales.vIndividualCustomer
的元数据。
USE AdventureWorks2022;
GO
EXECUTE sp_refreshview N'Sales.vIndividualCustomer';
B. 创建一个脚本,用于更新依赖于已更改对象的所有视图
假定表 Person.Person
进行了更改,其更改方式影响了基于此表创建的所有视图的定义。 以下示例将创建一个脚本,以便为与表 Person.Person
有依赖关系的所有视图刷新源数据。
USE AdventureWorks2022;
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.Person');