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 :

Trigger impliquant une mise à jour


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Par défaut Trigger impliquant une mise à jour
    Salut à tous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TRIGGER quality
    ON ReadContents r1
    AFTER INSERT
    AS
    UPDATE Contents SET Contents.quality = (select avg(qality) from ReadContents r2 WHERE r1.contents_id = r2.contents_id);
    Voila ce que je veux faire mais il n'aime pas r1.

    En fait quand j'insere une ligne de readContents je veux modifié la qualité dans content. Et le pb c que je ne voi d'autre solution pour le faire.

    Merci d'avance.
    Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

    Twitter Blog Mon site

    Mon article sur l'agilité

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Par défaut
    Après pas mal de tentative je me suis trouvé avec cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TRIGGER quality
    ON ReadContents
    AFTER INSERT
    AS
    DECLARE @contents_id int
    set @contents_id = (select contents_id FROM INSERTED)
    UPDATE Contents SET Contents.quality = (select avg(quality) from ReadContents r2 WHERE @contents_id = r2.contents_id);
    Maintenant il me reste qu'à verifier qu'il fait ce que j'attends de lui. Si y en a qui voi une erreur ou un défaut, ca serai cool de me le dire. Ou si vous pensez que c bon aussi lol.

    EDIT : Test fai ca marche bien .
    Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

    Twitter Blog Mon site

    Mon article sur l'agilité

  3. #3
    Membre émérite
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Par défaut
    pour un trigger tu disposes de 2 tables

    inserted et deleted

    pour un trigger insert : inserted
    pour un trigger update: inserted et deleted
    pour un trigger insert : deleted


    CREATE TRIGGER quality
    ON ReadContents r1
    AFTER INSERT
    AS
    UPDATE Contents SET Contents.quality = (select avg(qality) from ReadContents r2 WHERE r1.contents_id = r2.contents_id);
    normalement, pour être propre on fait

    CREATE TRIGGER quality
    ON ReadContents
    AFTER INSERT
    AS
    UPDATE Contents SET Contents.quality = (select avg(qality) from ReadContents r2 WHERE inserted.contents_id = r2.contents_id);

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Par défaut
    salut merci pour ta réponse serge, mais t sure que l'inserted dans la requete update marche parceque j'avais essayé de le faire mais il m'a jetté.

    Et la seconde maniére que j'ai fai ca te parait pas bien ?
    Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

    Twitter Blog Mon site

    Mon article sur l'agilité

  5. #5
    Membre émérite
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Par défaut
    j'ai pas de sql serveur sous la main, je suis sous Oracle aujourd'hui

    j'avais pas vu ta requete exacte, je pense que la synthaxe exacte est

    CREATE TRIGGER upd_quality
    ON ReadContents
    AFTER INSERT
    AS
    UPDATE Contents SET Contents.quality = avg(qality) from ReadContents r2 WHERE inserted.contents_id = r2.contents_id
    de plus, essaies de ne pas mélanger les noms
    ton trigger a le même nom qu'une colonne
    car si tu fais une requête dans les tables système (ex:syscolumns,sysobjects ), tu vas avoir des doublons

  6. #6
    Membre émérite
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Par défaut
    après réflexion:

    CREATE TRIGGER upd_quality
    ON ReadContents
    AFTER INSERT
    AS
    UPDATE Contents SET Contents.quality = avg(qality)
    from ReadContents r2
    inner join inserted ins
    WHERE ins.contents_id = r2.contents_id

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/02/2014, 08h06
  2. Réponses: 2
    Dernier message: 21/12/2005, 13h08
  3. [C#][ MSI] Comment effectuer une mise à jour d'application ?
    Par th3r1ddl3r dans le forum Windows Forms
    Réponses: 6
    Dernier message: 15/12/2005, 10h09
  4. Problème d'une mise à jour
    Par Hamdi dans le forum Access
    Réponses: 2
    Dernier message: 17/09/2005, 13h57

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