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

MS SQL Server Discussion :

Trigger MAJ quantité [2000]


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2003
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 207
    Par défaut Trigger MAJ quantité
    Bonjour,
    J'essaye de faire un trigger qui mettrait à jour la quantité d'une table en fonction de l'insert ou du delete d'une autre table
    voici les 2 tables :

    COMPO
    --------
    ID_COMPO
    ID_PRODUIT
    Quantite

    PRODUIT
    ---------
    ID_PROD
    NOM_PROD
    Quantite_Restante


    Je voudrais que si Insert dans COMPO cela me retranche la quantite du produit dans PRODUIT
    Et que si Delete dans COMPO cela me recrédite la quantite dans PRODUIT

    J'ai tenté ce trigger pour l'insert mais cela m'a mis à NULL toutes les quantite_restante de PRODUIT.
    Et si je ne met pas le "where" cela me retire la quantité à toutes les lignes de PRODUIT

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TRIGGER [retire_quantite] ON [COMPO] 
    FOR INSERT
    AS
    update [PRODUIT]
    set [quantite_restante]=[quantite_restante]-(select [quantite]  from inserted where ID_PROD=ID_PRODUIT)
    Je suis sûr que vous allez voir tout de suite ce qu'il ne va pas
    Merci

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    Oui, en effet, ce qui ne va pas, c'est cette colonne "quantite_restante" dans la table Produit...
    Elle devrait plutot être dans une vue qui fait le calcul...

    Enfin pour votre trigger, le comportement est normal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT [quantite]  FROM inserted WHERE ID_PROD=ID_PRODUIT
    Renvoit NULL pour le Produit n'ayant pas fait l'objet de mise à jour (donc pas dans la table inserted)

    du coup :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [quantite_restante]-(SELECT [quantite]  FROM inserted WHERE ID_PROD=ID_PRODUIT)
    est NULL aussi. Ansi, vous mettez à NULL toutes les quantités pour les produits qui ne sont pas dans inserted.

    Pour corriger cela, il faut ne mettre à jour que les produits qui sont dans inserted :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    UPDATE P
    SET [quantite_restante] -= [quantite]
    FROM Produit P
    INNER JOIN inserted
        ON    ID_PROD=ID_PRODUIT

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2003
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 207
    Par défaut
    Super j'ai compris et cela fonctionne très bien.

    En ce qui concerne de faire plutôt une vue qui effectuerai le calcul, c'est très certainement plus "propre" mais c'est préférable pour nous de modifier en "dur" dans la table les quantités restantes

    Merci !!

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Citation Envoyé par davelop Voir le message
    En ce qui concerne de faire plutôt une vue qui effectuerai le calcul, c'est très certainement plus "propre"
    Ce n'est pas juste plus propre, c'est aussi plus simple, plus sûr et plus performant qu'un trigger...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [9.1] Trigger maj d'un tsvector
    Par wamania dans le forum Requêtes
    Réponses: 0
    Dernier message: 23/11/2013, 09h58
  2. Réponses: 2
    Dernier message: 04/09/2009, 19h26
  3. Maj par trigger
    Par RSI06 dans le forum PL/SQL
    Réponses: 17
    Dernier message: 16/11/2007, 17h24
  4. Réponses: 9
    Dernier message: 16/10/2006, 13h47
  5. MAJ de champs avec un trigger
    Par gaultier dans le forum Oracle
    Réponses: 13
    Dernier message: 04/11/2004, 09h16

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