Partager via


ALTER VIEW (Transact-SQL)

Modifie une vue précédemment créée. Inclut une vue indexée. ALTER VIEW n'affecte pas les procédures stockées ou déclencheurs dépendants et ne modifie pas les autorisations.

Icône Lien de rubriqueConventions de syntaxe de Transact-SQL

Syntaxe

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

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

Arguments

  • schema_name
    Nom du schéma auquel appartient la vue.

  • view_name
    Vue à modifier.

  • column
    Nom(s) d'une ou de plusieurs colonnes séparées par des virgules, devant faire partie de la vue donnée.

    Important

    Les autorisations d'une colonne sont maintenues uniquement si le nom de la colonne reste le même avant et après l'exécution de l'instruction ALTER VIEW.

    [!REMARQUE]

    Dans les colonnes de la vue, les autorisations pour un nom de colonne s'appliquent d'un bout à l'autre d'une instruction CREATE VIEW ou ALTER VIEW, quelle que soit la source des données sous-jacentes. En effet, si des autorisations sont accordées sur la colonne SalesOrderID dans une instruction CREATE VIEW, une instruction ALTER VIEW peut renommer la colonne SalesOrderID , en OrderRef par exemple, et continuer de disposer des autorisations associées à la vue en utilisant SalesOrderID.

  • ENCRYPTION
    Chiffre les entrées syscomments contenant le texte de l'instruction ALTER VIEW. L'utilisation de WITH ENCRYPTION évite la publication de la vue dans le cadre de la réplication SQL Server.

  • SCHEMABINDING
    Lie la vue au schéma de la ou des tables sous-jacentes. Lorsque SCHEMABINDING est spécifié, les tables de base ne peuvent pas être modifiées d'une manière susceptible d'affecter la définition de la vue. La définition de la vue proprement dite doit d'abord être modifiée ou supprimée pour éliminer les dépendances de la table à modifier. Lorsque l'argument SCHEMABINDING est spécifié, select_statement doit comprendre les noms à deux composantes (schema**.**object) des tables, des vues ou des fonctions utilisateur référencées. Tous ces objets référencés doivent se trouver dans la même base de données.

    Les vues ou tables impliquées dans une vue créée avec la clause SCHEMABINDING ne peuvent pas être supprimées, sauf si cette vue perd, à la suite de sa suppression ou de sa modification, la liaison au schéma. Dans le cas contraire, le Moteur de base de données génère une erreur. En outre, les instructions ALTER TABLE portant sur des tables impliquées dans des vues liées au schéma échouent si elles affectent la définition des vues.

  • VIEW_METADATA
    Indique que l'instance de SQL Server retourne aux interfaces de programmation d'applications (API) DBLIB, ODBC et OLE DB les informations de métadonnées sur la vue, plutôt que sur la ou les tables de base, lorsque des métadonnées en mode lecture sont sollicitées pour une requête qui fait référence à la vue. Les métadonnées en mode de navigation sont des métadonnées supplémentaires que l'instance du moteur de base de données retourne aux API DB-Library, ODBC et OLE DB côté client. Ces métadonnées permettent aux API côté client d'implémenter des curseurs côté client susceptibles d'être mis à jour. Les métadonnées en mode Parcourir comprennent des informations sur la table de base à laquelle appartiennent les colonnes de l'ensemble de résultats.

    Dans le cas d'une vue créée par le biais de VIEW_METADATA, les métadonnées en mode Parcourir retournent le nom de la vue, et non celui de la table de base, lors de la description des colonnes de la vue comprise dans l'ensemble de résultats.

    Lorsqu'une vue est créée avec WITH VIEW_METADATA, toutes ses colonnes, à l'exception de la colonne timestamp, peuvent être mises à jour si elle comporte les déclencheurs INSERT ou UPDATE INSTEAD OF. Pour plus d'informations, consultez la section Notes dans CREATE VIEW (Transact-SQL).

  • AS
    Actions que la vue doit entreprendre.

  • select_statement
    Instruction SELECT qui définit la vue.

  • WITH CHECK OPTION
    Cette option garantit que toutes les instructions de modification de données exécutées sur la vue respectent les critères définis dans select_statement.

Notes

Pour plus d'informations sur ALTER VIEW, consultez la section Notes dans CREATE VIEW (Transact-SQL).

[!REMARQUE]

Si la définition précédente de la vue à été créée à l'aide des options WITH ENCRYPTION ou CHECK OPTION, ces options doivent figurer dans l'instruction ALTER VIEW pour être activées.

Si la vue actuellement utilisée est modifiée en utilisant ALTER VIEW, le moteur de base de données pose un verrou de schéma exclusif sur la vue. Lorsque le verrou est attribué (et qu'il n'y a aucun utilisateur actif de la vue), le moteur de base de données supprime toutes les copies de la vue du cache de procédure. Les plans existants qui font référence à la vue restent dans le cache, mais ils sont recompilés lorsqu'ils sont invoqués.

L"instruction ALTER VIEW peut être appliquée à des vues indexées, mais elle supprime de manière inconditionnelle tous les index de la vue.

Autorisations

Pour exécuter l'instruction ALTER VIEW, il est nécessaire de disposer au minimum de l'autorisation ALTER sur OBJECT.

Exemple

Cet exemple crée une vue qui contient tous les employés et leurs dates d'embauche, appelée EmployeeHireDate. Des autorisations sont accordées à la vue, mais les conditions ayant changé, il est nécessaire de sélectionner des employés dont la date d'embauche tombe avant une certaine date. Ensuite, l'instruction ALTER VIEW est utilisée pour remplacer la vue.

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

La vue doit être modifiée pour inclure uniquement les employés qui avaient été embauchés avant l'année 1997. Si ALTER VIEW n'est pas utilisée mais que la vue est supprimée et recréée, l'instruction GRANT précédemment utilisée et toutes les autres instructions liées aux autorisations appartenant à cette vue doivent être entrées à nouveau.

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