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, update et condition


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de shadowmoon
    Homme Profil pro
    Expert technique et fonctionnel .Net
    Inscrit en
    Mai 2005
    Messages
    1 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Expert technique et fonctionnel .Net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 066
    Par défaut Trigger, update et condition
    Bonjour

    Toutes mes excuses pour le mélange français / anglais.

    J'ai besoin d'une "traduction" en SQL sur le cas suivant.

    Dans un trigger déclenché par un update sur une table, je veux écrire une condition telle que :

    if only update(col1) or only update(col2) then ...

    Qui peut m'indiquer la syntaxe à utiliser ?

    Cordialement

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 400
    Par défaut
    Bonjour,
    La syntaxe dépend du SGBD (je suis justement en train de faire une migration de MaxDb vers SqlServer, la traduction des triggers n'est pas une mince affaire…).
    En gros il faut comparer l'ancienne valeur avec la nouvelle pour chaque colonne, un truc du genre:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (new.col1 <> old.col1 and new.col2 = old.col2) or (new.col1 = old.col1 and new.col2 <> old.col2) then

    Tatayo.

  3. #3
    Membre éprouvé Avatar de shadowmoon
    Homme Profil pro
    Expert technique et fonctionnel .Net
    Inscrit en
    Mai 2005
    Messages
    1 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Expert technique et fonctionnel .Net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 066
    Par défaut
    Merci pour cette réponse, qui me permet de m'apercevoir que j'ai oublié un point plutôt important et qui, je pense, change la problématique : la table en question contient 21 colonnes.

    Comme indiqué précédemment, je souhaite faire un traitement uniquement si le changement de valeur concerne la colonne G ou H.

    De plus c'est pour du Sql Server 2012.


    Cordialement

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 400
    Par défaut
    Citation Envoyé par shadowmoon Voir le message
    Merci pour cette réponse, qui me permet de m'apercevoir que j'ai oublié un point plutôt important et qui, je pense, change la problématique : la table en question contient 21 colonnes.
    Comme indiqué précédemment, je souhaite faire un traitement uniquement si le changement de valeur concerne la colonne G ou H.
    Pour être sûr de bien comprendre: il faut faire le traitement si une de ces deux colonnes a été modifiée (peu importe les 19 autres), ou si une et seulement une de ces colonnes est modifiée (et aucune autre) ?
    Dans le premier cas, le code ressemble à ceci:
    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
    17
    18
     
    create trigger TriggerName on LaTable after update as 
    begin
    	declare @oldColG int,@oldColH int,@newColG int,@newColH int
    	declare mycursor cursor for
    	select inserted.colg,inserted.colh,deleted.colg,deleted.colh
    		from inserted
    		inner join deleted on deleted.id = inserted.id
    	fetch mycursor into @newcolg,@newcolh,@oldcolg,@oldcolh
    	while @@fetch_status = 0
    	begin
    		if @oldcolg <> @newcolg or @colcolh <> @newcolh then
    			… le traitement
    	fetch mycursor into @newcolg,@newcolh,@oldcolg,@oldcolh
    	end
    	close mycursor
    	deallocate mycursor
    end

    Maintenant je débute avec les triggers sur SqlServer, donc si un spécialiste a des commentaires, il sont les bienvenus !

    Tatayo.

  5. #5
    Membre éprouvé Avatar de shadowmoon
    Homme Profil pro
    Expert technique et fonctionnel .Net
    Inscrit en
    Mai 2005
    Messages
    1 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Expert technique et fonctionnel .Net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 066
    Par défaut
    Bonjour


    Citation Envoyé par tatayo Voir le message
    si une et seulement une de ces colonnes est modifiée (et aucune autre)
    Nous somme en effet dans ce cas là

    Citation Envoyé par acaumes Voir le message
    (quitte à créer deux triggers selon ton besoin assez peu développé)
    Non, je ne dois pas créer de trigger, je dois ajouter des instructions dans un trigger existant et leur exécution est conditionnée.

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour

    Cela manque en effet de précision.

    Est-ce que la condition est qu'une seule des deux colonnes doit être visée par la commande UPDATE, ou est-ce qu'il doit effectivement y avoir des modifications des valeurs des colonnes ?

    Dans le second cas, vous pouvez faire une jointure entre les pseudo tables INSERTED et DELETED et vérifier s'il y a des modifications. Attention dans ce cas a traiter correctement le cas des NULLNotez par ailleurs que plusieurs ligne peuvent être mises à jour en même temps, il faut alors expliciter les règles de gestion si plusieurs cas de figure se présentent.

    Il serait utile d'en savoir un peu plus sur l'action a mener dans le trigger pour mieux vous aider.

  7. #7
    Membre éprouvé Avatar de shadowmoon
    Homme Profil pro
    Expert technique et fonctionnel .Net
    Inscrit en
    Mai 2005
    Messages
    1 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Expert technique et fonctionnel .Net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 066
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    Est-ce que la condition est qu'une seule des deux colonnes doit être visée par la commande UPDATE, ou est-ce qu'il doit effectivement y avoir des modifications des valeurs des colonnes ?

    ...

    Il serait utile d'en savoir un peu plus sur l'action a mener dans le trigger pour mieux vous aider.
    Le trigger se déclenche au moment de l'update d'une ligne de la table.

    La condition est que seulement la valeur d'une des deux colonnes, ou les deux soit modifiée. Les valeurs des autres colonnes restent inchangées.

    L'instruction à exécuter est une insertion dans une autre table.

  8. #8
    Membre émérite
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 452
    Par défaut
    Bonjour,

    Regardes dans la doc si ton SGBD accepte la syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UPDATE OF <nom de colonne>
    Si oui, c'est la syntaxe à utiliser (quitte à créer deux triggers selon ton besoin assez peu développé)

    Edit : NB tu peux avoir plusieurs colonnes dans cette clause

    Cordialement

  9. #9
    Membre éprouvé Avatar de shadowmoon
    Homme Profil pro
    Expert technique et fonctionnel .Net
    Inscrit en
    Mai 2005
    Messages
    1 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Expert technique et fonctionnel .Net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 066
    Par défaut
    Bonjour

    Suite à une décision directoriale, le projet concernant cette requête a été mis en pause pour une durée indéterminée.

    L'entreprise a des problèmes financiers avec le client correspondant, je reviendrais ici quand la situation sera débloquée.

    Merci à toutes et à tous pour votre aide

    @+

Discussions similaires

  1. [trigger] update inserted?
    Par cosminutza dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 01/06/2005, 09h37
  2. Réponses: 2
    Dernier message: 10/05/2005, 18h15
  3. update avec condition sur autre table
    Par allowen dans le forum Langage SQL
    Réponses: 5
    Dernier message: 01/04/2005, 15h02
  4. UPDATE avec condition sur d'autres tables
    Par guda dans le forum Langage SQL
    Réponses: 7
    Dernier message: 10/03/2005, 11h20
  5. Trigger Update et Column_Updated
    Par Pm dans le forum Développement
    Réponses: 2
    Dernier message: 16/06/2004, 09h07

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