IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Pour débuter avec SQL Server : les triggers


Sujet :

Développement SQL Server

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 19
    Points : 9
    Points
    9
    Par défaut Pour débuter avec SQL Server : les triggers
    Bonjour, pour me former à la manipulation de données avec SQL Server j'aimerais réaliser un petit exercice en partant de la base de données disponible à cette adresse : http://a-vimory.developpez.com/tutor...er-2008-films/. Ce petit exercice consiste à concevoir un trigger sur l'insertion ou la mise à jour de données dans la table genre qui affiche un message d'erreur si on entre un genre dont le nom est déjà dans la base de données. En gros il s'agirait de réaliser la requête suivante : select count(*) from genre where nom= monnouveaunom. Le problème est que je ne sait pas quoi mettre dans le where. Quelqu'un pourrait il m'aider. Merci d'avance.

  2. #2
    Invité
    Invité(e)

  3. #3
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Préférez dans votre cas le prédicat EXISTS, qui sera plus performant que la fonction d'agrégat COUNT().

    Dans votre trigger, vous voulez tester si le genre existe déjà.
    Tout trigger vous permet l'accès à au moins une des deux tables virtuelles : INSERTED et DELETED.
    Ces deux tables ont strictement la même structure que la table à laquelle est attaché le trigger.

    Dans un trigger sur INSERT, vous n'avez accès qu'à la table virtuelle INSERTED, qui reflète les lignes qui viennent d'être ajoutées à la table.

    Dans un trigger sur DELETE, vous n'avez accès qu'à la table virtuelle DELETED, qui reflète les lignes qui viennent d'être supprimées de la table.

    Enfin dans un trigger sur UPDATE, vous avez accès à DELETED et INSERTED, qui reflètent respectivement les anciennes et nouvelles valeurs des lignes affectées par la mise à jour.

    Je comprend que vous faites cela à titre d'exercice, mais il vaut mieux que vous préfériez placer une contrainte d'unicité sur la colonne du nom du genre.
    En cas de tentative d'insertion d'un doublon, une exception de violation de cette contrainte sera levée.

    Dans votre trigger, la clause WHERE doit en fait être une jointure entre votre table et la table virtuelle INSERTED.
    Allez-vous écrire un trigger AFTER INSERT ou INSTEAD OF INSERT ?

    @++

Discussions similaires

  1. Nouvelle framework pour CRUD avec SQL Server
    Par Evoluteur dans le forum Outils
    Réponses: 0
    Dernier message: 26/02/2009, 19h39
  2. Réponses: 0
    Dernier message: 25/03/2008, 14h22
  3. Réponses: 0
    Dernier message: 25/03/2008, 14h20
  4. débuter avec sql server 2005
    Par hicham_alaoui1 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 07/02/2008, 16h18
  5. Gérer les queue avec sql server ?
    Par devdev dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 17/06/2004, 17h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo