sys.sp_refreshview(Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Microsoft Fabric 中的 SQL 分析终结点Microsoft Fabric 中的仓库Microsoft Fabric 中的 SQL 数据库

sys.sp_refreshview系统存储过程会更新指定的非模式绑定视图的元数据。 由于视图所依赖的基础对象的更改,视图的持久元数据会过期。

Transact-SQL 语法约定

语法

sys.sp_refreshview [ @viewname = ] N'viewname'
[ ; ]

参数

[ @viewname = ] N'viewname'

视图的名称。 @viewname为 nvarchar,没有默认值。 @viewname可以是多部分标识符,但只能引用当前数据库中的视图。

返回代码值

0(成功)或非零数字(失败)。

注解

如果你没有创建带有 SCHEMABINDING的 sp_refreshview 视图,运行时对视图底层对象做出影响视图定义的更改。 否则,查询视图时可能会返回意想不到的结果。

权限

需要 ALTER 对视图的权限,以及 REFERENCES 对视图列所引用的通用语言运行时(CLR)用户自定义类型和XML模式集合的权限。

示例

本文中的代码示例使用AdventureWorks2025了 、 AdventureWorksDW2025或AdventureWorksLT2025示例数据库,您可以从 Azure Data SQL Samples Repository 的 GitHub 仓库下载。

答: 更新视图的元数据

以下示例刷新视图 Sales.vIndividualCustomer 的元数据。

USE AdventureWorks2025;
GO

EXECUTE sp_refreshview N'Sales.vIndividualCustomer';

B. 创建一个脚本,用于更新依赖于已更改对象的所有视图

假设该表 Person.Person 的更改影响了其上任何视图的定义。 以下示例创建了一个脚本,为所有依赖于表 Person.Person的视图刷新元数据。

USE AdventureWorks2025;
GO

SELECT DISTINCT 'EXECUTE 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');