Freigeben über


sp_refreshview (Transact-SQL)

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance

Aktualisiert die Metadaten für die angegebene nicht schemagebundene Sicht. Persistente Metadaten für eine Sicht sind möglicherweise aufgrund von Änderungen an den zugrunde liegenden Objekten, von denen die Sicht abhängt, nicht mehr aktuell.

Transact-SQL-Syntaxkonventionen

Syntax

sp_refreshview [ @viewname = ] 'viewname'
[ ; ]

Argumente

[ @viewname = ] 'viewname'

Der Name der Ansicht. @viewname ist "nvarchar" ohne Standard. @viewname kann ein mehrteiliger Bezeichner sein, kann jedoch nur auf Ansichten in der aktuellen Datenbank verweisen.

Rückgabecodewerte

0 (Erfolg) oder eine Zahl ungleich null (Fehler).

Hinweise

Wenn keine Ansicht mit SCHEMABINDING erstellt wird, sollten Sie ausgeführt werden, sp_refreshview wenn Änderungen an den Objekten vorgenommen werden, die der Ansicht zugrunde liegen, die sich auf die Definition der Ansicht auswirken. Andernfalls kann die Ansicht unerwartete Ergebnisse erzielen, wenn sie abgefragt wird.

Berechtigungen

Erfordert die ALTER-Berechtigung für die Sicht und die REFERENCES-Berechtigung für CLR-benutzerdefinierte (Common Language Runtime) Typen und XML-Schemaauflistungen, auf die durch die Sichtspalten verwiesen wird.

Beispiele

A. Aktualisieren der Metadaten einer Ansicht

Im folgenden Beispiel werden die Metadaten für die Sicht Sales.vIndividualCustomer aktualisiert.

USE AdventureWorks2022;
GO

EXECUTE sp_refreshview N'Sales.vIndividualCustomer';

B. Erstellen eines Skripts, das alle Ansichten aktualisiert, die Abhängigkeiten von einem geänderten Objekt aufweisen

Angenommen, die Person.Person-Tabelle wurde auf eine Weise geändert, die sich auf die Definition von Sichten auswirkt, die für die Tabelle erstellt wurden. Im folgenden Beispiel wird ein Skript erstellt, das die Metadaten aller Sichten aktualisiert, die eine Abhängigkeit von der Person.Person-Tabelle aufweisen.

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');