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.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

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