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 :

[debutant]suppression en cascade


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2002
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 113
    Points : 84
    Points
    84
    Par défaut [debutant]suppression en cascade
    Bonjour a tous ,

    J'ai un p'tit souci au point de vue de la suppression en cascade !

    je vous explique j'ai une table Tpersonnes (nom,prenom,etc..)et une table Tnews (titre, description, fkpersonnes,....)qui contient une clef etrangere de la table Tpersonnes donc

    Je voudrais que lorsque j efface une personne les news appartenant a cette personne soit supprimer !

    je me suis base sur un exemple trouve sur votre site mais cela ne tourne pas !

    Ce triger est place sur la table Tpersonnes
    voila mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ALTER    Trigger SuppPers on Tpersonnes
    --Suppression
    for delete
    as
     
    --Liaison
    delete from Tnews
    from Tnews tn
    inner join DELETED d 
    on tn.fkpersonnes = d.pkpersonnes
    et lorsque je fais un
    delete from Tpersonnes where pkpersonnes = 3 par exemple dans l'analysuer de requete il me dit :

    Serveur*: Msg 547, Niveau 16, État 1, Ligne 1
    Conflit entre l'instruction DELETE et la contrainte COLUMN REFERENCE 'FK__Tnews__fkpersonn__1B0907CE'. Le conflit est survenu dans la base de données 'BurgoTest', table 'Tnews', column 'fkpersonnes'.
    L'instruction a été arrêtée.


    Je vois pas trop ce qui se passe ...si quelqu'un avait une idée !

    Je vous remercie

    Christophe

  2. #2
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 425
    Points : 358
    Points
    358
    Par défaut
    Est ce que pkpersonnes est bien un champ de ta table Personnes?

  3. #3
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 425
    Points : 358
    Points
    358
    Par défaut
    Je te propose ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ALTER    Trigger SuppPers on Tpersonnes 
    --Suppression 
    for delete 
    as 
     
    --Liaison 
    delete Tnews from Tnews tn 
    inner join DELETED d 
    on tn.fkpersonnes = d.pkpersonnes

  4. #4
    Membre régulier
    Inscrit en
    Décembre 2002
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 113
    Points : 84
    Points
    84
    Par défaut
    salut salut annedjomo,

    Oui pkpersonnes est en fait la clef primaire de la table personnes !
    on retrouve cette clef dans la table Tnews que j'ai appele fkpersonnes pour foreign key !

    Je viens d'essayer le declencheurs que tu m'as donne mais qd je fais ds l'analyseur de requete de sql serveur 2000

    un
    delete from Tpersonnes where pkpersonnes = 3


    Serveur : Msg 547, Niveau 16, État 1, Ligne 1
    Conflit entre l'instruction DELETE et la contrainte COLUMN REFERENCE 'FK__Tnews__fkpersonn__1B0907CE'. Le conflit est survenu dans la base de données 'BurgoTest', table 'Tnews', column 'fkpersonnes'.
    L'instruction a été arrêtée.

    qu'en penses tu j'aimerais beaucoup faire d udelete en cascade pour voir un peu ce que cela donne et en apprendre un peu plus !

    sinon je peux faire une procedure stockke

    qui me supprimera les news de la personnes
    puis la personne mais je prefererai un declencheur !

    je cherche aussi !

    si tu as une idée elle est la bienvenue !

    christophe

  5. #5
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 425
    Points : 358
    Points
    358
    Par défaut
    Et si tu essayes de supprimer le trigger et de le recréer avec ma syntaxe? Parce que chez moi cette syntaxe là fonctionne à merveille.

    A tout de suite

  6. #6
    Membre régulier
    Inscrit en
    Décembre 2002
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 113
    Points : 84
    Points
    84
    Par défaut
    re,

    j'ai clique sur supprimer il me l'a bien supprimer
    je viens de le recreer avec ta syntaxe mais qd je le lance dans l'analyseur

    avec mon delete Tpersonnes j'ai toujours le meme message !

    dois je changer quelque chose a la base , Tablela mettre en delete en cascade ou quelque chose comme cela !

    je suis debutant j'ai lu de la doc mais sans plus !

    Je te remercie chaleureusement pour le temps que tu passes sur mon stress !

    Christophe

  7. #7
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 425
    Points : 358
    Points
    358
    Par défaut
    S'il te plait genère le script de tes deux tables et tu me fais voir.

    Peut être y a t il quelque chose qui cloche quelque part.

  8. #8
    Membre régulier
    Inscrit en
    Décembre 2002
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 113
    Points : 84
    Points
    84
    Par défaut
    sorry mais le forum etait down !

    voici le script de mes deux tables !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    CREATE TABLE Tpersonnes (
        pkpersonnes INTEGER IDENTITY(0,1) NOT NULL,
        nom VARCHAR(40) NOT NULL,
        prenom VARCHAR(40) NOT NULL,
        mdp VARCHAR(20) NOT NULL,
        mail VARCHAR(50),
        bip VARCHAR(10),
        telephone VARCHAR(20),
        photo VARCHAR(40),
        persvues INTEGER DEFAULT 0 NOT NULL,
        statut BIT DEFAULT 1 NOT NULL,
        fkservices INTEGER,
        fkcivilite INTEGER,
        fkroles INTEGER,
        PRIMARY KEY (pkpersonnes)
    )
    GO
     
     
     
     
    CREATE TABLE Tnews (
        pknews INTEGER IDENTITY(0,1) NOT NULL,
        titrenews VARCHAR(40) NOT NULL,
        description TEXT NOT NULL,
        datenews DATETIME NOT NULL,
        nbvues INTEGER DEFAULT 0 NOT NULL,
        fkpersonnes INTEGER,
        pkcategories INTEGER,
        PRIMARY KEY (pknews)
    )
    GO
    je te remercie vraiment !

    Christophe

  9. #9
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 425
    Points : 358
    Points
    358
    Par défaut
    Je ne vois pas la ligne qui m'indique la référence de clé étrangère.

  10. #10
    Membre régulier
    Inscrit en
    Décembre 2002
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 113
    Points : 84
    Points
    84
    Par défaut
    salut
    desole de mettre du temps pour repondre !

    la ligne la voici :

    fkpersonnes INTEGER,

    mais j'ai trouve enfin en passant des heures sur le net a chercher et en trouvant des exemples voila ce que j'ai trouve je l'ai adapte et cela marche !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
     
    ALTER  Trigger Supp on Tpersonnes
    --Suppression
    INSTEAD OF delete
    as
    declare @id int
     
    select @id = pkpersonnes from deleted
     
    --Liaison
    delete from Tnews 
    WHERE Tnews.fkpersonnes = @id
     
    --person
    delete from Tpersonnes 
    where Tpersonnes.pkpersonnes = @id
    et pour le teste je fais un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    --delete from Tpersonnes where pkpersonnes = 3
    j'ai teste ca tourne impeccable et je comprends le code !

    qu"'en penses tu ?

    je te remercie vraiment

    Christophe

  11. #11
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 425
    Points : 358
    Points
    358
    Par défaut
    Personnellement je ne vois pas la nécessité de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    delete from Tpersonnes 
    where Tpersonnes.pkpersonnes = @id
    Et si tu l'enlèves est ce que ton trigger fonctionne toujours?

  12. #12
    Membre régulier
    Inscrit en
    Décembre 2002
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 113
    Points : 84
    Points
    84
    Par défaut
    salut ,

    je viens de mettre les lignes en commentaires et cela fontionne !

    ecoute j'ai trouve de la doc un peu partout sur le net pose des questions a gauche a droite et en rassemblant le tout !

    je vois que cela marche !

    maintenant est ce la bonne solution n'etant pas programmeur du tout je n'en ai aucune idee !

    ca tourne donc je vais laisser cela comme ca !

    Je te remercie vraiment pour l'aide que tu m'as apporte et te souhaite une excellente semaine

    Christophe

  13. #13
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 425
    Points : 358
    Points
    358
    Par défaut
    Pour ma part j'ai trouvé que c'était redondant avec ces lignes là.

    Puisse cela fonctionne laisse le ainsi et penses à mettre le tag RESOLU.

    Bonne semaine à toi.

    Anne

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

Discussions similaires

  1. suppression en cascade dans formulaire et sous-formulaire
    Par tooneygirl dans le forum Access
    Réponses: 7
    Dernier message: 20/06/2005, 14h17
  2. Requetes de suppression en cascade
    Par log2n dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 20/05/2005, 10h07
  3. Suppression en cascade
    Par log2n dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/05/2005, 20h33
  4. [Debutant]Suppression dans des tables avec contraintes
    Par Roming22 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 26/10/2004, 17h23
  5. [debutant] suppression d'imbrication
    Par dor_boucle dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/07/2004, 17h01

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