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

MS SQL Server Discussion :

Triggers et Datetime


Sujet :

MS SQL Server

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 58
    Points : 37
    Points
    37
    Par défaut Triggers et Datetime
    Bonjour,

    Je suis débutant sous sql server 2000 et j'aimerais créer 2 champs datecrea et datemodif dans une table, qui comme leur nom le laisse deviner contiennent la date de création et la date modification d'un enregistrement. Biensur, j'aimerais que ces champs soit remplis automatiquement lors de la création d'un nouvel enregistrement et lors de la modification de certains champs de la table. J'ai lu qu'on pouvait faire ça avec des triggers mais je n'arrive pas à comprendre le fonctionnement de ces derniers.
    J'ai trouvé ce bout de code mais je n'arrive pas à l'adapter à mon cas:

    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
     
    CREATE TRIGGER MonTrigger ON MaTable AFTER UPDATE
    AS
     
        SET NOCOUNT OFF
     
        -- Met à jour le champ DateDeModification
        -- Des enregistrements mis à jours
        UPDATE MaTable as tab
        SET DateDeModification = GETDATE()
        WHERE EXISTS
            (    
                SELECT * FROM inserted AS ins
                WHERE tab.Clef = ins.Clef
            )
    GO
    Est ce que quelqu'un peut m'expliquer comment ca marche?

    Merci d'avance

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 58
    Points : 37
    Points
    37
    Par défaut
    Après m'être documenté plus sérieusement sur le sujet j'arrive à ça pour la date de modification:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CREATE TRIGGER DateModif ON Article AFTER UPDATE
    AS
        SET NOCOUNT OFF
        UPDATE Article
        SET art_datemodif = GETDATE()
     
       WHERE EXISTS (   
                SELECT * FROM INSERTED
                WHERE Article.art_num = INSERTED.art_num
        )
     
    GO
    Malheureusement, ça ne fonctionne pas. Le problème est que ma clé primaire (art_num) est une clé auto incrémentée donc elle n'apparait pas dans la "partie" SET d'une requête UPDATE mais plutot dans le WHERE. A partir de là, est ce que INSERTED.art_num renvoie une valeur ?

    Pour la date de création, j'ai un peu plus de mal sur le dernier WHERE, parce que la clé primaire n'apparait jamais pas une requête INSERT, est-ce que je peux utiliser la fonction MAX de SQL ou existe t'il une fonction qui permet de récupérer la clé primaire de l'enregistrement en cours d'insertion?

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 896
    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 896
    Points : 53 126
    Points
    53 126
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TRIGGER DateModif 
    ON Article 
    FOR UPDATE
    AS
        UPDATE Article
        SET art_datemodif = CURRENT_TIMESTAMP
        FROM Article A
               INNER JOIN INSERTED i
                ON A.art_num = i.art_num
    Pour la datetime création prévoyez par une contrainte DEFAULT la valeur CURRENT_TIMESTAMP.

    A +

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 58
    Points : 37
    Points
    37
    Par défaut
    Merci pour votre réponse. Ca fonctionne bien maintenant.

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

Discussions similaires

  1. [power designer et Sybase] trigger
    Par mr_qno dans le forum Sybase
    Réponses: 4
    Dernier message: 12/07/2006, 18h32
  2. [Interbase6] Trigger : Post_event
    Par Andry dans le forum InterBase
    Réponses: 2
    Dernier message: 13/05/2003, 09h27
  3. Trigger ??
    Par XDeus dans le forum Développement
    Réponses: 6
    Dernier message: 31/03/2003, 09h44
  4. [PostgreSQL] Refus de STATEMENT dans un trigger
    Par alex2205 dans le forum Requêtes
    Réponses: 3
    Dernier message: 10/03/2003, 12h51
  5. [Comparatif] Procédures stockées, triggers, etc.
    Par MCZz dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 28/08/2002, 12h27

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