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 :

[Triggers] Deletes en cascade récalcitrants


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2003
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 20
    Points : 15
    Points
    15
    Par défaut [Triggers] Deletes en cascade récalcitrants
    Bonjour,

    voici ma config pour commencer :
    - OS : WXP HOME
    - SGBD : MSDE 2000 8.00.760
    - SQL Accessers : DbaMgr2k et MS SQL WDA

    Ensuite j'ai le trigger suivant qui s'enclenche sur la suppression d'une row de la table LCsList :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TRIGGER [TriggerDelLC] 
    	ON [dbo].[LCsList]
    		FOR DELETE
    AS
    	DECLARE @dbid INT
    	SELECT @dbid=lc_id FROM DELETED
    BEGIN
    	DELETE FROM [dbo].[HsList] WHERE [HsList].[lc_id]=@dbid
    	DELETE FROM [dbo].[LC] WHERE [LC].[dbid]=@dbid
    END
    Ensuite j'ai le trigger suivant qui s'enclenche sur la suppression d'une row de la table HoursList :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TRIGGER [TriggerDelHour] 
    	ON [dbo].[HsList]
    		FOR DELETE
    AS
    	DECLARE @dbid INT
    	SELECT @dbid=h_id FROM DELETED
    BEGIN
    	DELETE FROM [dbo].[PsList] WHERE [PsList].[h_id]=@dbid
    	DELETE FROM [dbo].[H] WHERE [H].[dbid]=@dbid
    END
    Enfin j'ai le trigger suivant qui s'enclenche sur la suppression d'une row de la table PsList :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TRIGGER [TriggerDelP10] 
    	ON [dbo].[PsList]
    		FOR DELETE
    AS
    	DECLARE @dbid INT
    	SELECT @dbid=p_id FROM DELETED
    BEGIN
    	DELETE FROM [dbo].[P] WHERE [P].[dbid]=@dbid
    END
    Mon problème est le suivant quand je supprime dans le code de mon appli une ligne de LCsList, ça supprime bien avec le trigger les lignes correspondantes de HsList et la ligne de LC mais pas le reste.

    Apparemment il y a un problème avec le second trigger.

    Quelqu'un pourrait-il m'éclairer de ses lumières ?

    Merci d'avance.

    PS : logiquement : Un Truc (ne figure pas ici) est composé (LCsList) de LC qui lui-même est composé (HsList) de H qui lui-même est composé (PsList) de P.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Je n'ai jamais utilisé de trigger sous SQL server mais de ce que j'ai compris la table Deleted peut avoir plusieurs lignes, ce que tu n'as pas prévu dans tes triggers.
    Tu as écris
    Ensuite j'ai le trigger suivant qui s'enclenche sur la suppression d'une row de la table LCsList :
    En fait il se déclenche aussi sur la suppression de plusieurs lignes de la table LCSList.
    De toutes façon quand TriggerDelLC se déclenche pour une ligne il va supprimer plusieurs lignes dans HsList or le trigger TriggerDelHour n'est pas prévu pour traiter les deletes multiples.

    Je te laisse adapter ton code, maintenant que tu as une piste, par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TRIGGER [TriggerDelHour]
       ON [dbo].[HsList]
          FOR DELETE
    AS
    BEGIN
       DELETE FROM [dbo].[PsList] WHERE [PsList].[h_id] in (SELECT h_id FROM DELETED)
       DELETE FROM [dbo].[H] WHERE [H].[dbid] in (SELECT h_id FROM DELETED)
    END
    Et ainsi de suite.
    A voir l'article de SQLPro sur les triggers
    http://sqlpro.developpez.com/cours/s...ransactsql/#L5
    A+
    Soazig

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2003
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 20
    Points : 15
    Points
    15
    Par défaut
    Merci, en effet la réponse tu l'as donnée, c'était exactement ça.

    Je te remercie de cette précieuse aide.

    A charge de revanche...

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

Discussions similaires

  1. TRIGGER INSTEAD OF DELETE et DELETE ON CASCADE
    Par stephane.julien dans le forum Développement
    Réponses: 5
    Dernier message: 22/06/2011, 17h50
  2. Les Triggers : Delete en cascade ...
    Par foolib dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 16/01/2009, 13h27
  3. Delete en cascade
    Par defrgly57 dans le forum ASP
    Réponses: 3
    Dernier message: 12/04/2004, 12h13
  4. Delete on cascade avec SQL server
    Par fadoua dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 14/01/2004, 11h02
  5. delete en cascade
    Par bruno270579 dans le forum Requêtes
    Réponses: 8
    Dernier message: 16/12/2003, 17h17

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