ALTER VIEW (Transact-SQL)

Modifica una vista creata in precedenza. È possibile utilizzare questa istruzione anche per le viste indicizzate. ALTER VIEW non influisce sulle stored procedure o i trigger dipendenti e non comporta modifiche delle autorizzazioni. Per ulteriori informazioni sui parametri utilizzati nell'istruzione ALTER VIEW, vedere CREATE VIEW (Transact-SQL).

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

ALTER VIEW [ schema_name . ] view_name [ ( column [ ,...n ] ) ] 
[ WITH <view_attribute> [ ,...n ] ] 
AS select_statement 
[ WITH CHECK OPTION ] [ ; ]

<view_attribute> ::= 
{ 
    [ ENCRYPTION ]
    [ SCHEMABINDING ]
    [ VIEW_METADATA ]     
} 

Argomenti

  • schema_name
    Nome dello schema a cui appartiene la vista.
  • view_name
    Vista da modificare.
  • column
    Nome o elenco di nomi delimitato da virgole delle colonne che si desidera includere nella vista specificata.

    ms173846.note(it-it,SQL.90).gifImportante:
    Le autorizzazioni di colonna vengono mantenute solo se il nome delle colonne rimane uguale prima e dopo l'esecuzione dell'istruzione ALTER VIEW.

    [!NOTA] Nelle colonne della vista, le autorizzazioni per un nome di colonna rimangono valide anche in seguito all'esecuzione di un'istruzione CREATE VIEW o ALTER VIEW, indipendentemente dall'origine dei dati sottostanti. Ad esempio, se si concedono autorizzazioni per la colonna SalesOrderID con un'istruzione CREATE VIEW, è possibile utilizzare un'istruzione ALTER VIEW per rinominare la colonna SalesOrderID, ad esempio in OrderRef, e mantenere comunque le autorizzazioni associate alla vista che utilizza la colonna SalesOrderID.

  • ENCRYPTION
    Crittografa le voci nella tabella sys.syscomments contenenti il testo dell'istruzione ALTER VIEW. Se si utilizza WITH ENCRYPTION, la vista non viene pubblicata nell'ambito della replica di SQL Server.
  • SCHEMABINDING
    Associa la vista allo schema della tabella o delle tabelle sottostanti. Se si specifica SCHEMABINDING non è possibile apportare modifiche alle tabelle di base, che influiscono sulla definizione della vista. In questi casi, è necessario modificare o eliminare la definizione della vista per rimuovere le dipendenze dalla tabella da modificare. Quando si specifica SCHEMABINDING, l'argomento select_statement deve includere i nomi in due parti (schema**.**object) delle tabelle, viste o funzioni definite dall'utente a cui si fa riferimento. Tutti gli oggetti a cui si fa riferimento devono esistere nello stesso database.

    Le viste o tabelle che fanno parte di una vista creata con la clausola SCHEMABINDING non possono essere eliminate, a meno che tale vista non venga eliminata o modificata in modo che non sia più associata a uno schema. In tutti gli altri casi Microsoft Motore di database di SQL Server 2005 restituisce un errore. Inoltre, le istruzioni ALTER TABLE eseguite su tabelle che fanno parte di viste associate a schema hanno esito negativo se modificano la definizione della vista.

    Non è possibile specificare la clausola SCHEMABINDING se la vista contiene colonne con tipo di dati alias.

  • VIEW_METADATA
    Specifica che l'istanza di SQL Server restituirà alle API DB-Library, ODBC e OLE DB le informazioni dei metadati sulla vista anziché sulla tabella o tabelle di base, quando vengono richiesti i metadati in modalità browse per una query che fa riferimento alla vista. I metadati in modalità browse sono metadati aggiuntivi restituiti dall'istanza di Motore di database alle API DB-Library, ODBC e OLE DB sul lato client. Tali metadati consentono alle API sul lato client di implementare cursori aggiornabili sul lato client. I metadati in modalità browse includono informazioni sulla tabella di base a cui appartengono le colonne del set dei risultati.

    Per le viste create con l'opzione VIEW_METADATA, i metadati in modalità browse restituiscono il nome della vista anziché i nomi delle tabelle di base nella descrizione delle colonne della vista nel set dei risultati.

    Quando si crea una vista con l'opzione VIEW_METADATA, tutte le relative colonne, tranne le colonne di tipo timestamp, risultano aggiornabili se la vista include trigger INSERT o UPDATE INSTEAD OF. Per ulteriori informazioni, vedere la sezione Osservazioni in CREATE VIEW (Transact-SQL).

  • AS
    Azioni che la vista deve eseguire.
  • select_statement
    Istruzione SELECT che definisce la vista.
  • WITH CHECK OPTION
    Forza il rispetto del set di criteri specificato in select_statement per tutte le istruzioni di modifica dei dati eseguite sulla vista.

Osservazioni

Per ulteriori informazioni sull'istruzione ALTER VIEW, vedere la sezione Osservazioni in CREATE VIEW (Transact-SQL).

[!NOTA] Se la definizione precedente della vista è stata creata con WITH ENCRYPTION o CHECK OPTION, queste opzioni vengono attivate solo se sono incluse nell'istruzione ALTER VIEW.

Se si modifica una vista in uso con ALTER VIEW, Motore di database acquisisce un blocco di schema esclusivo sulla vista. Quando viene concesso il blocco e non esistono utenti attivi della vista, Motore di database elimina tutte le copie della vista dalla cache delle procedure. I piani esistenti che fanno riferimento alla vista rimangono nella cache, ma vengono ricompilati per chiamate successive.

È possibile utilizzare ALTER VIEW per viste indicizzate. Tuttavia, in questo caso vengono eliminati tutti gli indici nella vista, senza eccezioni.

Autorizzazioni

Per eseguire ALTER VIEW, è richiesta come minimo l'autorizzazione ALTER per OBJECT.

Esempi

Nell'esempio seguente viene creata una vista contenente tutti i dipendenti e le relative date di assunzione, denominata EmployeeHireDate. Vengono concesse autorizzazioni alla vista, ma è richiesta una modifica dei requisiti per selezionare i dipendenti con date di assunzione precedenti alla data specificata. La vista viene quindi sostituita tramite l'istruzione ALTER VIEW.

USE AdventureWorks ;
GO
CREATE VIEW HumanResources.EmployeeHireDate
AS
SELECT c.FirstName, c.LastName, e.HireDate
FROM HumanResources.Employee AS e JOIN Person.Contact AS c
ON e.ContactID = c.ContactID ;
GO

È necessario modificare la vista per includere solo i dipendenti assunti prima del 1997. Se non si utilizza ALTER VIEW, ma si elimina e ricrea la vista, sarà necessario specificare nuovamente l'istruzione GRANT utilizzata in precedenza e qualsiasi altra istruzione correlata alle autorizzazioni per questa vista.

ALTER VIEW HumanResources.EmployeeHireDate
AS
SELECT c.FirstName, c.LastName, e.HireDate
FROM HumanResources.Employee AS e JOIN Person.Contact AS c
ON e.ContactID = c.ContactID
WHERE HireDate < CONVERT(DATETIME,'19980101',101) ;
GO

Vedere anche

Riferimento

CREATE TABLE (Transact-SQL)
CREATE VIEW (Transact-SQL)
DROP VIEW (Transact-SQL)
SELECT (Transact-SQL)
EVENTDATA (Transact-SQL)

Altre risorse

Creazione di stored procedure (Motore di database)
Utilizzo degli identificatori come nomi di oggetti
Modifiche allo schema nei database di pubblicazione

Guida in linea e informazioni

Assistenza su SQL Server 2005