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 :

[SQL2K] delete cascade d'une table sur elle même


Sujet :

MS SQL Server

  1. #1
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut [SQL2K] delete cascade d'une table sur elle même
    Bonjour,

    Je suis confronté à un petit problème. Sous Sql Server 2000 il est impossible de réaliser un delete cascade d'une table vers elle même car cela crée un cycle ce que Sql Server 2000 n'aime pas.

    Comment puis-je réaliser cette opération ? (procédure stockée, ...)

    Je n'ai pas trouvé mon bonheur sur ce forum, ni ailleurs pour le moment, j'espère donc que vous avez déjà été confrontés à cette situation ^^

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 933
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 933
    Points : 51 748
    Points
    51 748
    Billets dans le blog
    6
    Par défaut
    effectivement c'est normal car MS SQL Server ne gère pas la déférence de contrainte donc, pas de contraintes "circulaires"...

    Donc, proc stock ou si votre table modèlise un arbre, optez pour une représentation intervallaire, ce sera mille fois plus simple et plus performant !

    Lisez l'article que j'ai écrit à ce sujet :
    http://sqlpro.developpez.com/cours/arborescence/

    A +

  3. #3
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    J'ai déjà cet article très intéressant au passage

    Donc je vais probablement m'orienter sur une procédure stockée. Avez-vous un exemple de procédure dans le cadre d'un delete en cascade ? Car je ne suis pas très familier des procédures stockées et des possibilités du langage T-SQL ^^

    Sinon, à la place d'une procédure stockée, si je supprime la relation et que je gère moi même les opérations avec des triggers, est-ce une méthode correcte pour contourner ce problème ?

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 933
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 933
    Points : 51 748
    Points
    51 748
    Billets dans le blog
    6
    Par défaut
    si cette relation est elle me^me en relation... votre trigger va apeller un autre trigger qui va apeller un autre trigger.......

    Sachant que SQL Server est limité à 32 niveau d'imbrication d'appel ...

    Sinon, par une proc stock c'est possible, mais il faut le faire via une table temporaire de suppression pour les mêmes raisons :
    parcourir le fils, puis depuis les fils les petits fils, puis depuis les petits fils les arrières petits fils.... jusqu'à ce que la boucle n'insère plus rien dans la table de suppression.

    Au final, supprimer avec une jointure sur la table temporaire de suppression.

    A +

  5. #5
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Merci beaucoup, je m'y colle de ce pas

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

Discussions similaires

  1. jointure d'une table sur elle même
    Par fred! dans le forum Requêtes
    Réponses: 8
    Dernier message: 25/06/2012, 13h30
  2. [débutant] Cayenne; relation d'une table sur elle même.
    Par hhenry dans le forum Persistance des données
    Réponses: 0
    Dernier message: 22/08/2009, 16h05
  3. Comment faire un JOIN récursif d'une table sur elle-même?
    Par PierreCaron dans le forum Requêtes
    Réponses: 2
    Dernier message: 06/04/2009, 04h28
  4. Relation d'une table sur elle-même ?
    Par TallyHo dans le forum Requêtes
    Réponses: 2
    Dernier message: 30/10/2007, 01h14
  5. Probleme jointure d'une table sur elle même
    Par fred64 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 18/05/2006, 16h01

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