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 :

Aide modification Trigger


Sujet :

Développement SQL Server

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 43
    Points : 19
    Points
    19
    Par défaut Aide modification Trigger
    Bonjour à tous,

    J'ai une question concernant la création d'un trigger :

    J'ai aujourd'hui un trigger qui met à jour le champ updated_time avec la date/heure serveur à chaque UPDATE sur la table.
    Cependant j'ai dans cette table un champ "read" qui me sert pour les lu/non lu. Je ne souhaite pas que la seule mise à jour de ce champ read mette à jour updated_time.

    Evolution de mon trigger : je souhaiterais que mon trigger mette à jour updated_time avec la date/heure serveur seulement si le champ read n'a pas été updaté tout seul.

    Je m’oriente vers l'utilisation de "IF UPDATE (column)" mais je ne suis pas vraiment sûr de moi.

    Voici le code de mon trigger actuel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE TRIGGER update_time ON myTable AFTER UPDATE AS UPDATE myTable SET updated_time = CURRENT_TIMESTAMP WHERE id IN (SELECT DISTINCT id FROM INSERTED)

    Avez-vous une idée ?

    Merci
    Steve

  2. #2
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2003
    Messages : 733
    Points : 1 668
    Points
    1 668
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par steve-movi Voir le message
    Je m’oriente vers l'utilisation de "IF UPDATE (column)" mais je ne suis pas vraiment sûr de moi.
    Oui, c'est bien cela. Il faut conditionner votre trigger par :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    IF UPDATE(Col_1) OR UPDATE(Col_2)  OR ... 
    BGEIN 
     
    END;
    où COL_1, Col_2 etc. représentent des colonnes autres que la colonne particulière "Read" (c.à.d. différentes de la colonne "Read" )
    Il faut cependant bien comprendre que UPDATE(Col_i) retourne Vraie (True) dès lors que la colonne Col_i figure dans la partie SET Col_i = .. de l'UPDATE ,et ce, mêmes si la valeur affectée à la Colonne Col_i est identique à l'ancienne valeur.

    Si vous voulez mettre à jour la colonne updated_time uniquement lorsqu'au moins une des autres colonnes (Col_1, Col2, etc..) eut été réellement modifiées, alors vous devez en plus des IF UPDATE(Col_i) .. rajouter une clause WHERE pour comparer l'ancienne et la nouvelle valeur pour chacune des colonnes.

    Pour cela, pouvez procéder comme suit :

    Code SQL : 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
    CREATE TRIGGER update_time ON myTable AFTER UPDATE AS 
    IF UPDATE(Col_1) OR UPDATE(Col_2) OR ... 
    BGEIN 
    	UPDATE A 
    	   SET A.updated_time = CURRENT_TIMESTAMP 
    	FROM myTable A 
    	INNER JOIN INSERTED I 
    	 ON I.Id = A.ID 
    	WHERE (   ( ISNULL(I.Col_1,'') <> ISNULL(A.Col_1,'') ) 
               OR ( ISNULL(I.Col_2,'') <> ISNULL(A.Col_2,'') ) 
    			.... 
     
    		 ) ; 
     
     
    END;

    A+
    "Une idée mal écrite est une idée fausse !"
    http://hamid-mira.blogspot.com

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 43
    Points : 19
    Points
    19
    Par défaut
    Merci pour cette réponse très claire !

Discussions similaires

  1. Aide modification makefile
    Par Djaiii dans le forum Linux
    Réponses: 0
    Dernier message: 28/05/2008, 09h28
  2. [AIDE] modification d'un fichier texte
    Par babap1 dans le forum C++
    Réponses: 6
    Dernier message: 16/01/2008, 11h49
  3. aide modification d'un fichier en c
    Par laroche1 dans le forum C
    Réponses: 15
    Dernier message: 01/05/2007, 01h18
  4. [Oracle 9i] aide modification d'une colonne
    Par bubblelicious dans le forum Langage SQL
    Réponses: 7
    Dernier message: 02/03/2006, 15h29
  5. besoin d'aide sur trigger
    Par devalender dans le forum SQL
    Réponses: 2
    Dernier message: 18/07/2004, 22h28

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