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 :

SQL Delete Cascade


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Inscrit en
    Avril 2004
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 53
    Points : 47
    Points
    47
    Par défaut SQL Delete Cascade
    Bonjour,

    Voilà j'ai une table Folders contenant:
    FolderID
    FolderName
    ParentFolderID
    où FolderID est la clé primaire de la table et ParentFolderID une clé étrangère pointant sur FolderID.

    J'aimerais pouvoir supprimer un folder ainsi que tous les éventuels sous-folders qui pourraient être présents.
    Le problème est qu'à cause de l'auto jointure je n'ai pas la possibilité d'utiliser l'option delete cascade. Je dois donc réaliser ces suppressions programmatiquement.
    Il va certainement falloir que je regarde si chaque parent a ou non des sous folders et commencer à deleter lorsqu'il n'y en a plus et remonter jusquau folder qui devait être supprimé.

    Est ce que quelqu'un a une idée sur la façon de procéder ? Trigger ? cursor ?


    Merci

  2. #2
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 161
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par mschoum
    Bonjour,

    Voilà j'ai une table Folders contenant:
    FolderID
    FolderName
    ParentFolderID
    où FolderID est la clé primaire de la table et ParentFolderID une clé étrangère pointant sur FolderID.

    J'aimerais pouvoir supprimer un folder ainsi que tous les éventuels sous-folders qui pourraient être présents.
    Le problème est qu'à cause de l'auto jointure je n'ai pas la possibilité d'utiliser l'option delete cascade. Je dois donc réaliser ces suppressions programmatiquement.
    Il va certainement falloir que je regarde si chaque parent a ou non des sous folders et commencer à deleter lorsqu'il n'y en a plus et remonter jusquau folder qui devait être supprimé.

    Est ce que quelqu'un a une idée sur la façon de procéder ? Trigger ? cursor ?


    Merci
    Bonjou, je ne sais pas ce que j'ai compris la question où pas. éssayer ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    create trigger supp_cascade 
    on Folders after delete
    as
    declare @Folder_ID varchar(?)
    set @Folder_ID = (select FolderID  from deleted)
    --if @@error = 0
      delete from Folders  where  ParentFolderID= @Folder_ID

  3. #3
    Membre du Club
    Inscrit en
    Avril 2004
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 53
    Points : 47
    Points
    47
    Par défaut
    en fait imaginons que j'ai l'arborescence suivante:

    Folder1
    Folder2
    Folder21
    Folder22
    Folder221
    Folder3

    et que je veuille supprimer folder2
    Les sous folders et sous sous Folder de Folder2 (Folder21, Folder 22 et Folder 221) devraient également être supprimés

  4. #4
    Yad
    Yad est déconnecté
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 58
    Points : 58
    Points
    58
    Par défaut
    En passant par un Schéma cela ne devrai pas poser de problèmes ...

    Ajouter les différentes tables, les lier et paramétrer la cascade ...

  5. #5
    Membre du Club
    Inscrit en
    Avril 2004
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 53
    Points : 47
    Points
    47
    Par défaut
    Qu'appelles tu par schéma ?

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    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 772
    Points : 52 737
    Points
    52 737
    Billets dans le blog
    5
    Par défaut
    Remodélisez votre table sous forme intervallaire. Dès lors vous n'aurez plus de récursivité à gérer et le suppression d'un sous arbre se fera avec un simple DELETE....

    Voici l'article que j'ai écrit pour MS SQL Server avec toutes les requêtes et les procédures :
    http://sqlpro.developpez.com/cours/arborescence/

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/01/2010, 11h47
  2. SQL Server '05 : on delete cascade
    Par stringman62 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 14/12/2007, 16h12
  3. [PL/SQL 9i] détecter un Delete Cascade
    Par Yorglaa dans le forum SQL
    Réponses: 4
    Dernier message: 23/10/2007, 10h20
  4. [T-SQL]ON DELETE CASCADE..inconnu
    Par clasix dans le forum Sybase
    Réponses: 2
    Dernier message: 04/09/2006, 20h16
  5. [SQL 2K5] Pb : ON DELETE CASCADE : référence circulaire
    Par n00bi dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 29/05/2006, 08h48

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