Condividi tramite


sp_refreshview (Transact-SQL)

Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure

Aggiorna i metadati per la vista non associata a schema specificata. I metadati persistenti di una vista possono diventare obsoleti in seguito alla modifica degli oggetti sottostanti su cui è basata la vista.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

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

Argomenti

[ @viewname = ] 'viewname'

Il nome della visualizzazionre. @viewname è nvarchar, senza impostazione predefinita. @viewname può essere un identificatore multipart, ma può fare riferimento solo alle viste nel database corrente.

Valori del codice restituito

0 (esito positivo) o un numero diverso da zero (errore).

Osservazioni:

Se una vista non viene creata con SCHEMABINDING, sp_refreshview deve essere eseguita quando vengono apportate modifiche agli oggetti sottostanti alla vista, che influiscono sulla definizione della vista. In caso contrario, la vista potrebbe produrre risultati imprevisti quando viene eseguita una query.

Autorizzazioni

Sono richieste l'autorizzazione ALTER per la vista e l'autorizzazione REFERENCES per i tipi CLR (Common Language Runtime) definiti dall'utente e le raccolte di XML Schema a cui fanno riferimento le colonne della vista.

Esempi

R. Aggiornare i metadati di una visualizzazione

Nell'esempio seguente vengono aggiornati i metadati della vista Sales.vIndividualCustomer.

USE AdventureWorks2022;
GO

EXECUTE sp_refreshview N'Sales.vIndividualCustomer';

B. Creare uno script che aggiorna tutte le visualizzazioni con dipendenze da un oggetto modificato

Si supponga che la tabella Person.Person sia stata modificata in modo da influire sulla definizione di qualsiasi vista creata in base a essa. Nell'esempio seguente viene creato uno script con cui vengono aggiornati i metadati di tutte le viste con una dipendenza dalla tabella 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');