Recherche…


CRÉER UNE VUE

CREATE VIEW view_EmployeeInfo
AS   
    SELECT EmployeeID,
        FirstName,
        LastName,
        HireDate  
    FROM Employee
GO

Les lignes de vues peuvent être sélectionnées de la même manière que les tableaux:

SELECT FirstName
FROM view_EmployeeInfo

Vous pouvez également créer une vue avec une colonne calculée. Nous pouvons modifier la vue ci-dessus comme suit en ajoutant une colonne calculée:

CREATE VIEW view_EmployeeReport
AS   
    SELECT EmployeeID,
        FirstName,
        LastName,
        Coalesce(FirstName,'') + ' ' + Coalesce(LastName,'') as FullName,
        HireDate  
    FROM Employee
GO

Ce point de vue ajoute une colonne supplémentaire qui apparaîtra lorsque vous SELECT lignes de celui - ci. Les valeurs de cette colonne supplémentaire dépendent des champs FirstName et LastName dans la table Employee et sont automatiquement mises à jour en arrière-plan lorsque ces champs sont mis à jour.

CRÉER UNE VUE avec cryptage

CREATE VIEW view_EmployeeInfo
WITH ENCRYPTION
AS   
SELECT EmployeeID, FirstName, LastName, HireDate  
FROM Employee
GO

CREATE VIEW Avec INNER JOIN

CREATE VIEW view_PersonEmployee
AS  
    SELECT P.LastName,
        P.FirstName,
        E.JobTitle
    FROM Employee AS E
    INNER JOIN Person AS P  
        ON P.BusinessEntityID = E.BusinessEntityID
GO

Les vues peuvent utiliser des jointures pour sélectionner des données provenant de nombreuses sources telles que des tables, des fonctions de tableau ou même d'autres vues. Cet exemple utilise les colonnes FirstName et LastName de la table Person et la colonne JobTitle de la table Employee.

Cette vue peut maintenant être utilisée pour voir toutes les lignes correspondantes pour les gestionnaires de la base de données:

SELECT *
FROM view_PersonEmployee
WHERE JobTitle LIKE '%Manager%'

CREER une vue indexée

Pour créer une vue avec un index, la vue doit être créée à l'aide des mots-clés WITH SCHEMABINDING :

CREATE VIEW view_EmployeeInfo
WITH SCHEMABINDING
AS   
    SELECT EmployeeID,
        FirstName,
        LastName,
        HireDate  
    FROM [dbo].Employee
GO

Tous les index en cluster ou non peuvent être maintenant créés:

CREATE UNIQUE CLUSTERED INDEX IX_view_EmployeeInfo
ON view_EmployeeInfo
(
     EmployeeID ASC
)

Il y a des limitations aux vues indexées:

  • La définition de vue peut référencer une ou plusieurs tables de la même base de données.

  • Une fois l'index unique en cluster créé, des index non clusterisés supplémentaires peuvent être créés dans la vue.

  • Vous pouvez mettre à jour les données dans les tables sous-jacentes, y compris insérer, mettre à jour, supprimer et même tronquer.

  • Vous ne pouvez pas modifier les tables et les colonnes sous-jacentes. La vue est créée avec l'option WITH SCHEMABINDING.

  • Il ne peut pas contenir COUNT, MIN, MAX, TOP, les jointures externes ou quelques autres mots-clés ou éléments.

Pour plus d'informations sur la création de vues indexées, vous pouvez lire cet article MSDN

VUES groupées

Une vue groupée est basée sur une requête avec une clause GROUP BY. Comme chacun des groupes peut avoir plus d'une ligne dans la base à partir de laquelle il a été construit, il s'agit nécessairement de vues en lecture seule. Ces vues ont généralement une ou plusieurs fonctions d'agrégat et sont utilisées à des fins de génération de rapports. Ils sont également pratiques pour contourner les faiblesses de SQL. Considérons une vue qui montre la plus grande vente dans chaque état. La requête est simple:

https://www.simple-talk.com/sql/t-sql-programming/sql-view-beyond-the-basics/

CREATE VIEW BigSales (state_code, sales_amt_total)
AS SELECT state_code, MAX(sales_amt)
     FROM Sales
    GROUP BY state_code;

VUES UNION-ed

Les vues basées sur une opération UNION ou UNION ALL sont en lecture seule car il n'existe aucun moyen unique de mapper une modification sur une seule ligne dans l'une des tables de base. L'opérateur UNION supprimera les lignes en double des résultats. Les deux opérateurs UNION et UNION ALL masquent la table dont proviennent les lignes. Ces vues doivent utiliser un, car les colonnes d'un UNION [ALL] n'ont pas de nom propre. En théorie, une UNION de deux tables disjointes, dont aucune ne contient de lignes en double, devrait pouvoir être mise à jour.

https://www.simple-talk.com/sql/t-sql-programming/sql-view-beyond-the-basics/

CREATE VIEW DepTally2 (emp_nbr, dependent_cnt)
AS (SELECT emp_nbr, COUNT(*)
      FROM Dependents
     GROUP BY emp_nbr)
   UNION
   (SELECT emp_nbr, 0
      FROM Personnel AS P2
     WHERE NOT EXISTS 
          (SELECT *
             FROM Dependents AS D2
            WHERE D2.emp_nbr = P2.emp_nbr));


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow