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 :

probleme trigger update apres un delete


Sujet :

Développement SQL Server

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Points : 28
    Points
    28
    Par défaut probleme trigger update apres un delete
    J'ai un probleme sous MS SQL SERVER avec un Trigger, dans le sens où je crois comprendre l'erreur mais je ne vois pas comment contourner le probleme, je m'explique :

    J'ai une table principale ARTICLE_REFERENCES qui renseigné par 6 autres tables (la clé étrangère vers ARTICLE_REFERENCES est reference_id) et Le premier inséré position = 1, le 2eme position = 2, etc..

    Je voudrais que lorsque je delete un tuple, toutes les positions des autres tuples dont la position est plus grande que celle que je delete soit décrémentée de un.

    Par exemple, avec la liste : 1 , 2 , 3 , 4 , 5 ; Je supprime le 3, sans aucune modification de la liste est 1 , 2 , 4 , 5 ; Le but du trigger est de mettre à jour le 4 , 5 en les modifiant en 3 , 4.

    J'espère avoir été clair

    Donc voici mon trigger, qui est valide, donc bien entré dans le serveur MS SQL SERVER :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE  TRIGGER UpID_reference AFTER DELETE ON ARTICLE_REFERENCES
    FOR EACH ROW
    UPDATE ARTICLE_REFERENCES SET reference_id=reference_id where reference_id>OLD.reference_id;
    je vous remercie bcp

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

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

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    CREATE TRIGGER UpID_reference AFTER DELETE ON ARTICLE_REFERENCES
    FOR EACH ROW
    UPDATE ARTICLE_REFERENCES SET reference_id=reference_id WHERE reference_id>OLD.reference_id;
    il te manque la décrémentation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE  TRIGGER UpID_reference AFTER DELETE ON ARTICLE_REFERENCES
    FOR EACH ROW
    UPDATE ARTICLE_REFERENCES SET reference_id=reference_id-1 WHERE reference_id>OLD.reference_id;
    Errare humanum est, perseverare diabolicum (Sénèque)

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Points : 28
    Points
    28
    Par défaut
    merci pour la réponse, je l'ai faite (la décrémentation) c'était une omission comme j'ai fait copier/coller.

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

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

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    ou est le pb alors ?
    Errare humanum est, perseverare diabolicum (Sénèque)

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Points : 28
    Points
    28
    Par défaut
    je pense que l'erreur vient du fait que "reference_id" est une clé primaire de la table principale donc elle n'accepte pas un update !
    pour info reference_id est un : INTEGER IDENTITY (1,1)

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

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

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    essaies de mettre un set identity off avant ton update puis tu remets un set identity on après

    le fait que ce soit une clé primaire n'a pas d'effet car dans ton cas
    tu supprime 3
    tu passes le 4 en 3
    le 5 en 4
    ...
    donc tu as toujours unicité

    regarde plutot si c'est pas un FK (foreign key)
    Errare humanum est, perseverare diabolicum (Sénèque)

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Points : 28
    Points
    28
    Par défaut
    [QUOTEregarde plutot si c'est pas un FK (foreign key)[/QUOTE]

    c'est une FK pour les autres tables, je voix pas la conséquence ???

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

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

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    ce qui veut dire

    table1
    1 toto
    2 tata
    3 tutu
    4 titi

    table 2
    1 un
    2 deux
    3 trois
    4 quatre

    la première colonne de la table1 est une FK de la colonne 1 de la table2

    si tu supprime la ligne 3 de la table1 ta cle FK de la table2 n'existe plus

    il est la ton pb...
    Errare humanum est, perseverare diabolicum (Sénèque)

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Points : 28
    Points
    28
    Par défaut
    Ok je comprends, mon problème vient en effet dans ma bd j’ai un autre trigger qui incrémente le champ «reference_id» dans les 6 autres tables et dés que je supprime (en cascade) une ligne donc dans les autres aussi elle est supprimée jusque la tout va bien.
    A partir de la dés que j’insère une nouvelle ligne il me dit que y a conflit !

    C’est pour cela que je veux créer un autre trigger pour remettre en ordre le champ reference_id

    Peut être il existe une autre solution ??

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Points : 28
    Points
    28
    Par défaut
    Ok je comprends, mon problème vient en effet dans ma bd j’ai un autre trigger qui incrémente le champ «reference_id» dans les 6 autres tables et dés que je supprime (en cascade) une ligne donc dans les autres aussi elle est supprimée jusque la tout va bien.
    A partir de la dés que j’insère une nouvelle ligne il me dit que y a Conflit entre l'instruction INSERT et la contrainte COLUMN FOREIGN KEY !

    C’est pour cela que je veux créer un autre trigger pour remettre en ordre le champ reference_id

    Peut être il existe une autre solution ??

  11. #11
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Citation Envoyé par agur29 Voir le message
    Donc voici mon trigger, qui est valide, donc bien entré dans le serveur MS SQL SERVER :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE  TRIGGER UpID_reference AFTER DELETE ON ARTICLE_REFERENCES
    FOR EACH ROW
    UPDATE ARTICLE_REFERENCES SET reference_id=reference_id where reference_id>OLD.reference_id;
    je vous remercie bcp
    Bonjour,

    Es-tu vraiment vraiment sûr que ton trigger est valide dans SQL Server ? Cette syntaxe correspond à de l'Oracle ou du PostgreSQL, sauf erreur.
    Rudi Bruchez
    Rudi Bruchez EIRL, solutions MS SQL Server et NoSQL
    LinkedIn - [Outil libre de diagnostic SQL Server : Sql Trismegiste]
    LIVRES : Optimiser SQL Server -
    Microsoft SQL Server 2012 Security Cookbook
    - les bases de données NoSQL

    e-learning : LinkedIn Learning - Pluralsight

Discussions similaires

  1. Trigger : update apres un insert
    Par xav_carene dans le forum SQL
    Réponses: 4
    Dernier message: 18/08/2010, 17h48
  2. probleme de updated en trigger
    Par DJERDJAR YACINE dans le forum Développement
    Réponses: 2
    Dernier message: 31/07/2007, 17h44
  3. [ASP.NET-ACCESS] probleme d'update apres insertion
    Par come18 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 14/05/2007, 12h59
  4. Problème trigger BEFORE UPDATE
    Par berceker united dans le forum SQL Procédural
    Réponses: 8
    Dernier message: 30/08/2006, 16h55
  5. Réponses: 13
    Dernier message: 20/03/2006, 16h26

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