Vues SQL Server (Views)

Comment gérer les vues SQL Server? Les vues SQL Server permettent de visualiser tout ou une partie des données contenues dans des tables sans accéder directement au contenu de la table. De plus les vues SQL permettent d’agréger les données de plusieurs tables, en sélectionnant des colonnes avec les mêmes structures.

Gérer les vues avec SQL Server avec des scripts T-SQL

En SQL (Structured Query Language), ou langage de requête structuré en Français, une vue est un objet qui permet de sélectionner un ensemble de données. Cet ensemble provient d’autres tables ou d’autres vues (elles mêmes basées sur des tables).

La sélection se fait sur les colonnes et les lignes. C’est à dire qu’il est possible de filtrer les lignes avec une une clause WHERE et de choisir les colonnes ou de les recréer dans la clause SELECT de la vue.

Voici des exemples de code pour créer, modifier, appeler ou encore supprimer des vues simples ou encore des vues partitionnées.

Tous les exemples de scripts ci-dessous sont basés sur la table des ventes:

CREATE TABLE [dbo].[VENTES] 
(
 [MoisNom] NVARCHAR(50), -- alphanumérique
 [MoisCourant]  BIT, -- booléen, 0 ou 1 , false / true
 [NumeroMois] TINYINT, -- très petit entier, de 0 à 255
 [NumeroEmploye] SMALLINT, -- petit entier, minimum -2^15, maximum 2^15
 [NombreClients] INTEGER, -- entier, minimum -2^31, maximum 2^31
 [NombreVentes] BIGINT, -- grand entier, minimum: -2^63, maximum 2^63
 [Montant_HT] NUMERIC(15,5), -- numérique, 15 chiffres, dont 5 après la virgule
 [Montant_TTC] DECIMAL(15,5) -- décimal, 15 chiffres, dont 5 après la virgule
);

Créer une vue SQL (CREATE VIEW)

Premièrement, voici un exemple de script T-SQL pour créer une vue simple basée sur la table des ventes dont le code est disponible au dessus.

CREATE VIEW [dbo].[V_VENTES]
AS 
  SELECT 
    [NombreClients],
    [NombreVentes],
    [Montant_HT],
    [Montant_TTC]
  FROM [dbo].[VENTES];

Modifier une vue existante (ALTER VIEW)

Deuxièmement, utiliser cet exemple de code SQL pour modifier une vue existante avec la commande ALTER VIEW.

ALTER VIEW [dbo].[V_VENTES_E]
WITH ENCRYPTION 
AS 
  SELECT 
    [NombreVentes], -- Suppression de la colonne [NombreClients]
    [Montant_HT],
    [Montant_TTC]
  FROM [dbo].[VENTES];

Supprimer une vue SQL Server (DROP VIEW)

Par contre, pour complètement supprimer une vue, donc sa structure, utiliser la commande DROP VIEW.

DROP VIEW [dbo].[V_VENTES];

Si la vue n’existe pas, alors une erreur du type Impossible de trouver l’objet… est renvoyée par le SGBD.

Tester si une Vue SQL Server existe et la supprimer sans erreur (IF EXISTS et DROP VIEW)

En effet, pour éviter les erreurs durant la suppression d’objet, tester d’abord l’existence de la vue avec la commande IF EXISTS.

IF EXISTS (
  SELECT 1 FROM sys.objects
  WHERE  object_id = object_id(N'[dbo].[V_VENTES]')
    AND type in (N'V') )
BEGIN 
  DROP VIEW [dbo].[V_VENTES];
END;

Créer une vue partitionnée (CREATE VIEW et UNION ALL)

De même, pour regrouper les données de plusieurs tables dans une seule vue, utiliser cet exemple. En principe, avec une simple requête select combinée à une union de données.

Noter que les trois sélections sur les tables (ou vues) ont obligatoirement la même structure.

CREATE VIEW [dbo].[V_VENTES_P]
AS 
  SELECT [NombreClients], [NombreVentes], [Montant_HT], [Montant_TTC]
  FROM [dbo].[VENTES_01]

  UNION ALL 

  SELECT [NombreClients], [NombreVentes], [Montant_HT], [Montant_TTC]
  FROM [dbo].[VENTES_02]

  UNION ALL 

  SELECT [NombreClients], [NombreVentes], [Montant_HT], [Montant_TTC]
  FROM [dbo].[VENTES_03];

Créer une vue SQL Server avec CREATE VIEW et WITH ENCRYPTION

Ainsi l’encryption masque le code de la vue dans la table système sys.comments. Dans ce cas, si le système utilise la réplication Microsoft SQL, il ne publie pas la vue.

L’option d’encryption ne masque pas les données.

CREATE VIEW [dbo].[V_VENTES_E]
WITH ENCRYPTION 
AS 
  SELECT 
    [NombreClients],
    [NombreVentes],
    [Montant_HT],
    [Montant_TTC]
  FROM [dbo].[VENTES];

Soyez le premier à commenter

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.


*