Dans SQL Server, vous pouvez interroger sous forme de vues. Les vues sont avantageuses pour de nombreuses raisons, notamment la sécurité, la convivialité et la commodité.
Dans SQL Server, une vue est une table virtuelle dont le contenu est défini par une requête. Il s'agit essentiellement d'une requête pré-écrite qui est stockée dans la base de données.
Une vue consiste en un SELECT
, et lorsque vous exécutez une requête sur la vue, vous en voyez les résultats comme vous le feriez lors de l'ouverture d'une table. Les vues sont appelées tables virtuelles car elles peuvent rassembler des données de plusieurs tables, ainsi que des données agrégées, et les présenter comme s'il s'agissait d'une seule table.
Avantages des vues
Une vue peut être utile lorsqu'il y a plusieurs utilisateurs avec différents niveaux d'accès, qui ont tous besoin de voir des parties des données dans la base de données (mais pas nécessairement toutes les données). Les vues peuvent effectuer les opérations suivantes :
- Restreindre l'accès à des lignes spécifiques dans un tableau
- Restreindre l'accès à des colonnes spécifiques dans un tableau
- Joignez les colonnes de plusieurs tables et présentez-les comme si elles faisaient partie d'une seule table
- Présenter des informations agrégées (telles que les résultats du
COUNT()
fonction)
Comment créer une vue
Vous créez une vue en utilisant le CREATE VIEW
instruction, suivie de SELECT
déclaration.
CREATE VIEW ViewName AS SELECT ...
Nous allons maintenant créer une vue à partir de notre requête précédente.
-
Concevoir la vue
Prenez la requête de notre exemple précédent et préfixez-la avec CREATE VIEW RecentAlbums AS .
Supprimez également le
ORDER BY
clause, car les vues ne prennent pas en charge cette clause (sauf siTOP
,OFFSET
ouFOR XML
est également spécifié).Ajoutez également un point-virgule à la fin de l'instruction, en tant que terminateur d'instruction (plus d'informations à ce sujet ci-dessous).
Exemple de code
Ci-dessous le code de notre exemple, avec le
ORDER BY
clause supprimée et un point-virgule ajouté comme terminateur d'instruction.Je l'ai également reformaté un peu pour le rendre plus lisible).
CREATE VIEW RecentAlbums AS SELECT Albums.ReleaseDate, Albums.AlbumName, Genres.Genre, Artists.ArtistName FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId INNER JOIN Genres ON Albums.GenreId = Genres.GenreId WHERE (Albums.ReleaseDate > DATEADD(year, - 10, GETDATE()));
Dans cet exemple, j'ai ajouté un point-virgule à la fin de la vue. Le concepteur de requêtes ne l'a pas inclus, mais il est recommandé de l'inclure.
Le point-virgule fait partie de la norme ANSI SQL-92. C'est un caractère de fin d'instruction.
En outre, Microsoft a annoncé que les instructions Transact-SQL ne se terminant pas par un point-virgule sont obsolètes dans SQL Server 2016 et qu'elles ne seront pas prises en charge dans une future version (SQL Server a historiquement utilisé le
GO
mot-clé comme terminateur d'instruction au lieu du point-virgule). -
Exécuter la vue
Maintenant, exécutez la vue comme vous exécuteriez n'importe quelle autre requête.
Cliquez sur Exécuter dans la barre d'outils.
Vous pouvez maintenant accéder à la vue dans l'Explorateur d'objets. Développez-le et vous verrez les colonnes, leurs types de données et leurs propriétés, comme s'il s'agissait d'un tableau.
-
Interroger la vue
Maintenant que la vue a été créée, vous pouvez interroger la vue en exécutant un
SELECT
déclaration à son encontre.Vous pouvez donc interroger notre vue nouvellement créée en utilisant
SELECT * FROM RecentAlbums;
. -
Filtrer la vue
L'un des avantages des vues est que vous pouvez leur appliquer vos propres critères de filtrage, ce qui filtre davantage les résultats.
Par exemple, vous pouvez ajouter
WHERE Genre = 'Pop'
, de sorte que la vue ne renvoie que pop albums des 10 dernières années.
Modifier une vue
Vous pouvez modifier votre vue en utilisant le ALTER VIEW
au lieu de la CREATE VIEW
déclaration.
-
Concevoir la vue modifiée
Ici, nous allons modifier notre vue pour renvoyer les albums des 20 dernières années au lieu de seulement 10.
C'est une collection assez old school, donc tout album sorti au cours des 20 dernières années est classé comme "récent" :)
Nous renverrons également une autre colonne :Artists.ActiveFrom
Exemple de code
Voici le code que nous utilisons pour l'exemple :
ALTER VIEW RecentAlbums AS SELECT Albums.ReleaseDate, Albums.AlbumName, Genres.Genre, Artists.ArtistName, Artists.ActiveFrom FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId INNER JOIN Genres ON Albums.GenreId = Genres.GenreId WHERE (Albums.ReleaseDate > DATEADD(year, - 20, GETDATE()));
-
Interroger la vue
Maintenant, interroger la vue renverra 20 ans d'albums. Il affichera également la date à partir de laquelle l'artiste était actif.