sp_refreshview (Transact-SQL)
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.
Sintassi
sp_refreshview [ @viewname = ] 'viewname'
Argomenti
- [ @viewname= ] 'viewname'
Nome della vista. viewname è di tipo nvarchar e non prevede alcun valore predefinito. viewname può essere un identificatore in più parti ma può fare riferimento solo a viste del database corrente.
Valori restituiti
0 (esito positivo) o un numero diverso da zero (esito negativo)
Osservazioni
Se una vista non viene creata con associazione a schema, è consigliabile eseguire sp_refreshview quando vengono apportate modifiche agli oggetti sottostanti alla vista che influiscono sulla definizione della vista. In caso contrario, le query sulla vista possono generare risultati imprevisti.
Autorizzazioni
Sono richieste l'autorizzazione ALTER per la vista e l'autorizzazione REFERENCES per i tipi CLR (Common Language Runtime) definiti dall'utente e gli insiemi di schemi XML a cui fanno riferimento le colonne della vista.
Esempi
A. Aggiornamento dei metadati di una vista
Nell'esempio seguente vengono aggiornati i metadati della vista Sales.vIndividualCustomer.
USE AdventureWorks;
GO
EXECUTE sp_refreshview N'Sales.vIndividualCustomer';
B. Creazione di uno script con cui vengono aggiornate tutte le viste con dipendenze da un oggetto modificato
Si supponga che la tabella Person.Contact 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.Contact.
USE AdventureWorks;
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.Contact');