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 :

problème de trigger


Sujet :

Développement SQL Server

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 41
    Points : 19
    Points
    19
    Par défaut problème de trigger
    Bonjour chers développeurs!

    Voila j'ai un soucis pour un trigger. En fait, j'ai l'intention de faire un trigger qui vise à remplir une table à part, après une mise à jour d'un champs dans une table.
    Je ne sais pas comment faire pour faire en sorte que le trigger se declenche apres la mise à jour de ce CHAMPS et non de tous les champs de la table. comment faire sous SQL server? Merci d'avance

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 77
    Points : 90
    Points
    90
    Par défaut
    dans le corps du trigger :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    IF UPDATE (nom_champs)
    Begin
     ... traitement ...
    End

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 41
    Points : 19
    Points
    19
    Par défaut
    Ok merci je vais faire ça!

    une dernière chose, sous oracle, j'utilisais le old et le new pour recuperer l'ancienne donnée avt mise à jour et la nouvelle donnée apres mise à jour. Comment on fait sous SQL server?
    je te remercie d'avance.

    PS : si quelqu'un me repond et que je repond pas, je m'excuse d'avance car je serai plus sur le net avant demain. Vous etes sympas de m'aider thanks!

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 77
    Points : 90
    Points
    90
    Par défaut
    old = deleted
    new = inserted

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 41
    Points : 19
    Points
    19
    Par défaut
    Old = deleted
    new = inserted

    ?

    attend ,là c'est une mise à jour. par exemple, dans un Insert into, ça donnerait sous oracle:

    INSERT INTO TABLE values (id, dateTable, old.champs1, new.champ2) et tu sais comment on fait sous sql server?

  6. #6
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 41
    Points : 19
    Points
    19
    Par défaut
    c bon merci! J'avais pas bien compris! à plus!

  7. #7
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 41
    Points : 19
    Points
    19
    Par défaut
    Bon j'ai fait ce que tu m'as dit mais ça ne marche pas. Il me dit ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Serveur : Msg 107, Niveau  16, État 2, Procédure trigHistoS, Ligne 12
    Le préfixe de colonne 'INSERTED' ne correspond ni au nom de table ni au nom d'alias utilisés dans la requête.
    Serveur : Msg 107, Niveau  16, État 1, Procédure trigHistoS, Ligne 12
    Le préfixe de colonne 'DELETED' ne correspond ni au nom de table ni au nom d'alias utilisés dans la requête.
    Serveur : Msg 107, Niveau  16, État 1, Procédure trigHistoS, Ligne 14
    Le préfixe de colonne 'DELETED' ne correspond ni au nom de table ni au nom d'alias utilisés dans la requête.
    Serveur : Msg 107, Niveau  16, État 1, Procédure trigHistoS, Ligne 14
    Le préfixe de colonne 'INSERTED' ne correspond ni au nom de table ni au nom d'alias utilisés dans la requête.
    [/quote]

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 77
    Points : 90
    Points
    90
    Par défaut
    je sais pas ... fait voir ton code, stp

  9. #9
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 41
    Points : 19
    Points
    19
    Par défaut
    ok attends je te l'affiche :
    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
    18
    19
    20
    create trigger trigHistoS
    on pieces_detachees
    FOR UPDATE
     
    AS
     
    IF UPDATE(QtePiece) 
    begin
        	DECLARE @QtePreleve nvarchar(3)
     
     
        	if INSERTED.QtePiece < DELETED.QtePiece
         	begin
    		SET @QtePreleve = DELETED.QtePiece - INSERTED.QtePiece
     
        		insert into histoSortiePiece values(GETDATE(),' ', ' ', @QtePreleve, 0)
    	end
    end
     
    GO

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 77
    Points : 90
    Points
    90
    Par défaut
    tu considère inserted et deleted comme des variables alors que ce sont des tables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select i.*
    from inserted i

  11. #11
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 41
    Points : 19
    Points
    19
    Par défaut
    Bah alors. je fais comment recuperer l'ancien champ et le nouveau?

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 77
    Points : 90
    Points
    90
    Par défaut
    un truc comme ça peut-être ...

    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
    create trigger trigHistoS
    on pieces_detachees
    FOR UPDATE
     
    AS
     
    IF UPDATE(QtePiece)
    begin
         insert into histoSortiePiece
    			select GETDATE(),' ', ' ', d.QtePiece - i.QtePiece, 0
    			From inserted i, deleted d
    			where i.id = d.id
    			and i.QtePiece < d.QtePiece
       end
    end
     
    GO

  13. #13
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 41
    Points : 19
    Points
    19
    Par défaut
    Merci! ça a l'air de marcher! A plus!

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

Discussions similaires

  1. PL/SQL problème sur Trigger
    Par kitsune dans le forum PL/SQL
    Réponses: 4
    Dernier message: 06/12/2005, 20h35
  2. [9i] problème avec trigger after logon
    Par Michael# dans le forum Oracle
    Réponses: 2
    Dernier message: 17/03/2005, 12h14
  3. [Interbase6] Problème de triggers
    Par emeraudes dans le forum Bases de données
    Réponses: 4
    Dernier message: 08/03/2005, 09h52
  4. [SQLPLUS] - Problème de Triggers Java
    Par farcis dans le forum Oracle
    Réponses: 7
    Dernier message: 23/12/2004, 09h21
  5. [PL/SQL] problème de trigger
    Par Chuck67 dans le forum Oracle
    Réponses: 14
    Dernier message: 09/12/2004, 23h17

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