Examen SQL Server (T-SQL)
Le modèle relationnel de la base de données AdventureWorksLT2022 comprend plusieurs tables
interconnectées représentant différents aspects d'une entreprise de vente au détail.
Tables Principales :
• Customer : Informations sur les clients.
• Product : Détails des produits vendus.
• ProductCategory : Catégories des produits.
• ProductDescription : Descriptions des produits.
• ProductModel : Modèles des produits.
• SalesOrderHeader : En-têtes des commandes de vente.
• SalesOrderDetail : Détails des commandes de vente.
• Address : Adresses des clients et autres entités.
• CustomerAddress : Relations entre les clients et leurs adresses.
Relations entre les Tables :
• Customer et SalesOrderHeader : Relation un-à-plusieurs où un client peut avoir plusieurs
commandes (clé étrangère : CustomerID).
• SalesOrderHeader et SalesOrderDetail : Relation un-à-plusieurs où une commande peut avoir
plusieurs détails de commande (clé étrangère : SalesOrderID).
• Product et SalesOrderDetail : Relation un-à-plusieurs où un produit peut apparaître dans
plusieurs détails de commande (clé étrangère : ProductID).
• Product et ProductCategory : Relation plusieurs-à-un où plusieurs produits peuvent appartenir à
une catégorie (clé étrangère : ProductCategoryID).
• ProductModel et Product : Relation plusieurs-à-un où plusieurs produits peuvent être basés sur
un modèle (clé étrangère : ProductModelID).
• ProductDescription et ProductModel : Relation plusieurs-à-plusieurs, souvent implémentée via
une table de jonction pour gérer les descriptions des modèles de produits (table intermédiaire :
ProductModelProductDescription).
Travail à faire :
1. Afficher les noms des produits, leur prix et une colonne StockStatus indiquant In Stock ou Out
of Stock selon que le stock soit supérieur ou inférieur à une certaine quantité (par exemple, 10).
2. Créer une fonction scalaire pour calculer le nombre de commandes passées par un client donné après
une date donnée. Tester cette fonction.
3. Créer une fonction table pour retourner les produits qui n'ont jamais été commandés, en incluant le
nom du produit et le prix. Tester cette fonction.
4. Créer une procédure stockée contenant une transaction pour transférer une commande d'un client à
un autre, en mettant à jour toutes les références nécessaires dans les tables SalesOrderHeader et
SalesOrderDetail. Tester cette procédure.
5. Créer un trigger AFTER UPDATE sur la table Product pour enregistrer les anciennes et nouvelles
valeurs du prix dans une table ProductPriceHistory(id, oldPrice, newPrice, changeDate) .