Udostępnij za pomocą


sp_refreshview (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBaza danych SQL w usłudze Microsoft Fabric

Aktualizuje metadane określonego widoku niezwiązanego schematem. Trwałe metadane widoku mogą stać się nieaktualne z powodu zmian w obiektach bazowych, od których zależy widok.

Transact-SQL konwencje składni

Składnia

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

Argumenty (w programowaniu)

[ @viewname = ] "viewname"

Nazwa widoku. @viewname to nvarchar bez wartości domyślnej. @viewname może być identyfikatorem wieloczęściowym, ale może odwoływać się tylko do widoków w bieżącej bazie danych.

Zwracanie wartości kodu

0 (powodzenie) lub liczba niezerowa (niepowodzenie).

Uwagi

Jeśli widok nie jest tworzony z , SCHEMABINDINGsp_refreshview powinien być uruchamiany podczas wprowadzania zmian w obiektach leżących u podstaw widoku, co wpływa na definicję widoku. W przeciwnym razie widok może przynieść nieoczekiwane rezultaty podczas zapytania.

Uprawnienia

Wymaga ALTER uprawnień do widoku oraz REFERENCES uprawnień do typów zdefiniowanych przez użytkownika w języku common language (CLR) oraz kolekcji schematów XML, do których odnoszą się kolumny widoku.

Przykłady

Przykłady kodu w tym artykule korzystają z przykładowej bazy danych AdventureWorks2025 lub AdventureWorksDW2025, którą można pobrać ze strony głównej Przykładów programu Microsoft SQL Server i projektów społeczności.

Odp. Aktualizowanie metadanych widoku

Poniższy przykład odświeża metadane widoku Sales.vIndividualCustomer.

USE AdventureWorks2025;
GO

EXECUTE sp_refreshview N'Sales.vIndividualCustomer';

B. Tworzenie skryptu, który aktualizuje wszystkie widoki, które mają zależności od zmienionego obiektu

Załóżmy, że tabela Person.Person została zmieniona w sposób, który będzie miał wpływ na definicję wszystkich widoków, które są na niej tworzone. Poniższy przykład tworzy skrypt, który odświeża metadane dla wszystkich widoków, które mają zależność od tabeli 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');