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 :

Trigger toujours déclenché APRES


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 90
    Par défaut Trigger toujours déclenché APRES
    bonjour,

    Je suis sous SQL server2005, j'ai déclaré un trigger de la facon suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TRIGGER tr_PlageHoraire  ON PlageHoraire 
    for  delete 
    AS
    	UPDATE Utilisateurs
    	set Utilisateurs.Num_PlageHoraire = null where Utilisateurs.Num_PlageHoraire IN(select deleted.Num_Plage from deleted)
    Apres plusieurs essais, je me rends compte qu'il est déclenché apres l'excécution de la fonction delete et non pas avant comme je le souhaite. Du coup je me retrouve avec une erreur, dûe au fait que je veuille supprimer un n-upplets qui est utilisé comme clé étrangere dans une autre table. C'est pourquoi je fais un remplacement de la valeur de clé étrangere par un NULL.
    J'ai trouvé qu'il fallait utiliser la fonction before, mais elle est pas reconnu dans SQL server 2005 (version 9.0 SP1).
    Ci joint le modéle de l'aide sur le trigger:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TRIGGER [ schema_name . ]trigger_name 
    ON { table | view } 
    [ WITH <dml_trigger_option> [ ,...n ] ]
    { FOR | AFTER | INSTEAD OF } 
    { [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] } 
    [ WITH APPEND ] 
    [ NOT FOR REPLICATION ] 
    AS { sql_statement  [ ; ] [ ,...n ] | EXTERNAL NAME <method specifier [ ; ] > }
    Que faire ??? Avez vous une idée sur le sujet.

    En vous remerciant de vos futures réponses.

    Bien Cordialement,

    Léo V.V.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 26
    Par défaut
    Bonjour,


    effectivement, le trigger est pas défaut de type AFTER, et se déclenche après la mise à jour effective (à noter celle-ci peut être être annulée par un rollback, car le trigger s'exécute dans le contexte de transaction du code appelant).

    Le trigger INSTEAD OF peut répondre à ton problème : il se déclenche à la place de la mise à jour effective, qu'il faut dans ce cas faire explicitement à l'intérieur du trigger. Tu as donc tout loisir de faire ce que tu veux dans d'autres tables avant de faire ton propre DELETE ...


    HTH

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 90
    Par défaut
    Merci pour ta réponse, ca fonctionne et ca donne ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    IF OBJECT_ID ('tr_PlageHoraire', 'TR') IS NOT NULL
     DROP TRIGGER tr_PlageHoraire 
    GO
    CREATE TRIGGER tr_PlageHoraire  ON PlageHoraire 
    instead  of delete 
    AS
    	UPDATE Utilisateurs
    	set Utilisateurs.Num_PlageHoraire = null where Utilisateurs.Num_PlageHoraire IN(select deleted.Num_Plage from deleted)
    	DELETE FROM PlageHoraire WHERE Num_Plage IN(select deleted.Num_Plage from deleted)
    @+ et bonne continuation.

    Cordialement,

    Léo V.V.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/10/2011, 12h18
  2. Trigger se déclenche toujours!
    Par pasunegeek dans le forum LabVIEW
    Réponses: 6
    Dernier message: 02/12/2010, 08h52
  3. [C#] Process toujours actif apres fermeture de la fenetre
    Par toxycyty dans le forum Windows Forms
    Réponses: 4
    Dernier message: 26/10/2006, 16h48
  4. Réponses: 4
    Dernier message: 29/05/2006, 05h48
  5. Fichiers toujours apparents après un déplacer ?
    Par elitost dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 19/03/2006, 09h50

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