Conception et mise en œuvre de vues

Avant de créer une vue, envisagez les lignes directrices suivantes :

  • Vous pouvez créer des vues uniquement dans la base de données en cours. Toutefois, si la vue est définie à l'aide de requêtes distribuées, les tables et les vues référencées par la nouvelle vue peuvent se trouver dans d'autres bases de données ou même sur d'autres serveurs.

  • Le nom des vues doit respecter les règles en vigueur pour les identificateurs et doit être unique pour chaque schéma. Par ailleurs, il ne doit être identique à aucun nom de table contenue dans ce schéma.

  • Vous pouvez construire des vues à partir d'autres vues. Microsoft SQL Server permet l'imbrication des vues. Si le nombre maximal de niveaux d'imbrication est de 32, cette limite peut être réduite dans la pratique, en fonction de la complexité de la vue et de la mémoire disponible.

  • Vous ne pouvez pas associer des règles ou des définitions DEFAULT à des vues.

  • Vous ne pouvez pas associer des déclencheurs AFTER à des vues, mais seulement des déclencheurs INSTEAD OF.

  • La requête qui définit la vue ne peut comprendre ni les clauses COMPUTE ou COMPUTE BY, ni le mot clé INTO.

  • La requête qui définit la vue ne peut pas inclure la clause ORDER BY, à moins qu'il y ait également une clause TOP dans la liste de sélection de l'instruction SELECT.

  • La requête qui définit la vue ne peut pas inclure la clause OPTION qui spécifie un indicateur de requête.

  • La requête qui définit la vue ne peut pas inclure la clause TABLESAMPLE.

  • Vous ne pouvez pas créer des définitions d'index de texte intégral sur des vues.

  • Vous ne pouvez ni créer des vues temporaires, ni créer des vues à partir de tables temporaires.

  • Les vues, les tables ou les fonctions impliquées dans une vue créée avec la clause SCHEMABINDING ne peuvent pas être supprimées, sauf si, à la suite de sa suppression ou de sa modification, la vue perd la liaison au schéma. En outre, les instructions ALTER TABLE portant sur des tables impliquées dans des vues ayant une liaison avec un schéma échouent si elles affectent la définition des vues.

  • Si aucune vue n'est créée avec la clause SCHEMABINDING, sp_refreshview doit être exécutée lorsque des modifications sont apportées aux objets sous-jacents de la vue qui affectent sa définition. Autrement, la vue risque de produire des résultats imprévisibles en cas d'interrogation.

  • Vous ne pouvez pas soumettre des requêtes de texte intégral sur une vue, bien qu'une définition de vue puisse inclure une requête de texte intégral si cette requête fait référence à une table qui a été configurée pour l'indexation de texte intégral.

  • Vous devez indiquer le nom de toutes les colonnes de la vue si :

    • une ou plusieurs colonnes de la vue sont dérivées d'une expression arithmétique, d'une fonction intégrée ou d'une constante ;

    • deux colonnes de la vue ou davantage auraient sans cela le même nom (généralement parce que la définition de la vue comprend une jointure et que les colonnes de deux ou plusieurs tables différentes portent le même nom) ;

    • vous voulez donner à une colonne de la vue un nom différent de celui de la colonne dont elle est dérivée (vous pouvez aussi renommer des colonnes de la vue). Que vous renommiez ou non une colonne de la vue, elle hérite du type de données de la colonne dont elle est dérivée.

      Notes

      Cette règle n'est pas applicable lorsqu'une vue est basée sur une requête contenant une jointure externe, car les valeurs NULL interdites peuvent devenir autorisées dans les colonnes.

      Sinon, vous n'avez pas à spécifier des noms de colonnes lors de la création de la vue. SQL Server attribue aux colonnes de la vue les mêmes noms et les mêmes types de données que les colonnes auxquelles il est fait référence dans la requête qui définit la vue. La liste de sélection peut être une liste complète ou partielle des noms des colonnes des tables de base.

L'utilisateur qui souhaite créer une vue doit en avoir reçu l'autorisation explicite du propriétaire de la base de données et, si la vue est créée avec la clause SCHEMABINDING, il doit avoir les autorisations appropriées sur les tables ou les vues référencées dans la définition de la vue.

Par défaut, à mesure que des lignes sont ajoutées ou mises à jour par l'intermédiaire d'une vue, elles disparaissent de la portée de la vue dès lors qu'elles ne répondent plus aux critères de la requête de définition de la vue. Par exemple, vous pouvez créer une requête qui définit une vue extrayant toutes les lignes d'une table où le salaire de l'employé est inférieur à $ 30 000. Si l'employé bénéficie d'une augmentation de salaire qui porte celui-ci à $ 32 000, il n'apparaît plus lors des nouvelles requêtes sur la vue car son salaire ne satisfait plus aux critères définis par celle-ci. Il existe cependant une clause, nommée WITH CHECK OPTION, qui force l'adhésion de toutes les instructions de modification de données exécutées sur la vue aux critères déterminés par l'instruction SELECT qui définit la vue. Si vous employez cette clause, les lignes ne peuvent pas être modifiées de telle sorte qu'elles disparaissent de la vue. Toute tentative de modification d'une ligne pouvant entraîner cette situation est annulée et provoque l'affichage d'un message d'erreur.

Pour créer une vue