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 :

[SQL2K]Condition dans un trigger


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2003
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 207
    Points : 85
    Points
    85
    Par défaut [SQL2K]Condition dans un trigger
    Bonjour,

    Je souhaite mettre à jour un champ1 par la valeur d'un champ2 lorsque ce champ2 est modifié [et qu'il est vide au départ]

    J'ai fait ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TRIGGER [nom_trigger] ON [dbo].[nom_table] 
    FOR  UPDATE AS
    IF UPDATE(champ2)
    BEGIN
    Update  annuaire Set champ1 = champ2 where id in (select id from inserted)
    END
    Je n'arrive pas à indiquer la condition de faire l'update uniquement si le champ2 est vide au départ
    j'ai essayé de rajouter à la condition where : and champ2 is null
    Mais sans succès

    Auriez vous une idée.

    Merci d'avance

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 766
    Points : 52 563
    Points
    52 563
    Billets dans le blog
    5
    Par défaut
    Sans la description complète sous forme DDL de vos tables et notamment la clef, difficile de vous répondre.

    Merci de respecter la charte de postage : http://www.developpez.net/forums/d96...vement-poster/

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre régulier
    Inscrit en
    Juillet 2003
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 207
    Points : 85
    Points
    85
    Par défaut
    Désolé,
    j'ai modifié le titre pour être conforme à la charte. Si j'ai oublié autre chose dites le moi.

    Alors en fait considérons la table de manière simple :

    Nom_table
    ----------
    ID (Identifiant)
    Champ1
    Champ2

    Je veux si le champ2 est vide, quand on le modifie pour y entrer une valeur, que le champ1 prenne cette valeur entrée

    Avec le trigger indiqué plus haut que j'ai fait, cela fonctionne mais cela modifie le champ1 même si le champ2 que l'on change n'est pas vide à la base (je ne sais pas si je suis clair)

    La condition que je voudrais ajouter à ce trigger est qu'il s'exécute que si le Champ2 est vide avant d'être modifié

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Points : 1 216
    Points
    1 216
    Par défaut
    Utilisez également la table deleted, qui contient les lignes avant l'update (donc vous pouvez voir si champ2 était vide ou pas)
    Emmanuel T.

  5. #5
    Membre régulier
    Inscrit en
    Juillet 2003
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 207
    Points : 85
    Points
    85
    Par défaut
    Merci
    Comme cela ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE TRIGGER [nom_trigger] ON [dbo].[nom_table] 
    FOR  UPDATE AS
    IF UPDATE(champ2)
    BEGIN
    UPDATE  annuaire SET champ1 = champ2 WHERE id IN (SELECT id FROM inserted) 
    and id IN (SELECT id FROM deleted where champ2 IS NULL)
    END

  6. #6
    Membre régulier
    Inscrit en
    Juillet 2003
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 207
    Points : 85
    Points
    85
    Par défaut
    J'ai essayé ça marche !

    Merci !

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

Discussions similaires

  1. Condition dans une requête
    Par fdloisel dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/08/2004, 16h55
  2. Recuperer derniere valeur modifiée dans un trigger
    Par xabs dans le forum Développement
    Réponses: 2
    Dernier message: 06/08/2004, 16h22
  3. RAZ GENERATOR dans un trigger
    Par kase74 dans le forum SQL
    Réponses: 2
    Dernier message: 08/09/2003, 18h43
  4. select dans un trigger sous Postgresql
    Par kastor_grog dans le forum Requêtes
    Réponses: 1
    Dernier message: 03/09/2003, 17h00
  5. [PostgreSQL] Refus de STATEMENT dans un trigger
    Par alex2205 dans le forum Requêtes
    Réponses: 3
    Dernier message: 10/03/2003, 12h51

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