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 - Evaluer si champ vraiment modifié [2014]


Sujet :

Développement SQL Server

  1. #1
    Candidat au Club
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Octobre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Octobre 2018
    Messages : 3
    Par défaut Trigger - Evaluer si champ vraiment modifié
    Bonjour,

    Alors j'ai un trigger sur une table qui permet d'évaluer si un champ de prix a été réellement modifié. Si le nouveau prix est différent de l'ancien, alors la date du jour est récupérée dans un autre champ. Si le prix est le même alors le fameux champ date n'est pas modifié.

    Le trigger fonctionne si je vais dans une fiche article et que je fais une modification de prix.

    Le trigger ne fonctionne pas lorsque je fais de l'import en masse de nouveaux tarifs. Que le prix soit différent ou pas, la date n'est jamais modifiée... Et c'est là où je bloque !

    Voici mon code :

    Code : 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
     
    -- La table ARTTARIFLIGNE est la table de destination du nouveau prix
    CREATE TRIGGER  [dbo].[EXT_DATEMAJTARIF_IU] ON [dbo].[ARTTARIFLIGNE] 
    AFTER INSERT, UPDATE AS
    DECLARE @date date
    SET @date = GetDate()  
    IF (Update(ATFPRIX))
    BEGIN
     
    -- La table ARTICLES_P est la où se trouve ma colonne de date si modification	
    UPDATE ARTICLES_P
    	SET DATEMAJTARIF = @date
    	FROM  ARTICLES_P AS t
    	INNER JOIN INSERTED AS i ON T.ARTID = i.ARTID
    	INNER JOIN DELETED AS d ON T.ARTID = d.ARTID
    	WHERE i.ATFPRIX <> d.ATFPRIX
    END
    J'ai tenté des dizaines de variantes sans arrivé à une solutionlorsque j'importe en masse des nouveaux prix.

    Est-ce possible ? Si oui, où est mon erreur ?

    Merci par avance !

    Jean-Mi

  2. #2
    Membre émérite Avatar de Oishiiii
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Par défaut
    Bonjour,

    Quand vous faites seulement de l'INSERT il n'y a pas de lignes dans la table DELETED, donc votre requête avec jointure interne ne retourne aucune ligne.

  3. #3
    Candidat au Club
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Octobre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Octobre 2018
    Messages : 3
    Par défaut
    En effet, je viens de constater que l’import en masse des tarifs fait un INSERT et non un UPDATE donc je ne peux comparer les 2 données.

    Merci pour tout

  4. #4
    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

    Par ailleurs, je ne sais pas comment vous faites votre import en masse, mais la plupart, comme par exemple un BULK INSERT, ne déclenche pas les déclencheurs par défaut.

    Il faut en général forcer le déclenchement, par exemple en spécifiant l'option FIRE_TRIGGERS pour la commande BULK INSERT.

  5. #5
    Candidat au Club
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Octobre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Octobre 2018
    Messages : 3
    Par défaut
    Merci à tous pour vos réponses.

    Je peux donc clôturer le sujet !

    Jean-Mi

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

Discussions similaires

  1. [2008] Trigger - Evaluer si un champ est réellement modifié
    Par tiboleo dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 28/09/2010, 13h27
  2. valeur d'un champ text modifié par une variable en parametre
    Par klimero dans le forum Général JavaScript
    Réponses: 21
    Dernier message: 21/04/2006, 11h39
  3. [Requete action]selon les critères de 2 champs, en modifié 1
    Par Nicko29 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 18/11/2005, 17h53
  4. Rendre un champ non modifiable sur un onclick
    Par damjal dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 12/10/2005, 02h16
  5. Personnalisation d'un champ select : modifier la fleche
    Par teshub dans le forum Balisage (X)HTML et validation W3C
    Réponses: 12
    Dernier message: 05/09/2005, 16h57

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