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 :

Modifier un champ Date par trigger INSERT


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 884
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 884
    Par défaut Modifier un champ Date par trigger INSERT
    Bonjour tout le monde,

    J'aimerais avoir un champ date avec pour valeur par défaut l'heure/date système.

    Je suppose que pour y parvenir le mieux est un TRIGGER INSERT.

    [EDIT : la valeur par défaut a été obtenue autrement ; le sujet de modifier un champ par le TRIGGER INSERT garde son intérêt pour d'autres utilisations, voir message n° 6]

    Pour bien situer ce qui doit se faire dans quelle fenêtre, je tâtonne un peu.

    L'instruction "SET LADATE = CURRENT_TIMESTAMP" ayant généré l'exception "erreur de syntaxe près de =" je l'ai retirée (j'ai essayé d'autres fonctions date avant, comme source).

    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 OR ALTER TRIGGER dbo.CreateTension
       ON  dbo.Tension 
       FOR INSERT
    AS 
    BEGIN
    	-- SET NOCOUNT ON added to prevent extra result sets from
    	-- interfering with SELECT statements.
    	SET NOCOUNT ON;
    	DECLARE @dateok INT;
    	SET LaDate = CURRENT_TIMESTAMP;
    	DECLARE @PRINTMESSAGE VARCHAR(150);
    	PRINT 'Exécution du trigger CreateTension'
            SET @dateok = ISDATE(CURRENT_TIMESTAMP);
    	SET @PRINTMESSAGE = 'DateOk : ' + @dateok;
     
    END
    Et là on me dit :
    Échec de la conversion de la valeur varchar 'DateOk : ' en type de données int.
    Mais d'où sort cette idée de convertir mon message en entier ?

    Je me suis méfié que @PRINTMESSAGE pouvait être un mot-clé réservé (je me suis déjà laissé allé précédemment à appeler le champ clef DATE, dans certes un moment d'égarement).
    Alors, j'ai remplacé @PRINTMESSAGE par @PRTMSG.
    Le résultat est le même.

    (Mon message a été modifié, peut-être méritera-t-il aussi un changement de titre.)

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 430
    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 430
    Par défaut
    Bonjour,
    Comme ta variable @DateOk est un entier, SqlServer interprète la ligne 14 comme addition, et non une concaténation de chaine.
    D'où l'erreur...
    Il faut faire un cast explicite de ta variable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ...
    SET @PRINTMESSAGE = 'DateOk : ' + convert(varchar,@dateok);
    ...
    Tatayo.

  3. #3
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 884
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 884
    Par défaut
    Ah, tout s'éclaire ...
    Merci.

    Tant qu'on y est ... CAST et CONVERT, ça se vaut ?


    Pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET LaDate=SYSDATETIME();
    je me demande si il y a une astuce du même ordre. Elle n'est pas bien ma syntaxe ?
    LaDate étant un champ de table, de type DateTime.



    Il y a eu des jours où il a fallu ramer, d'autres où je me suis un peu trop laissé aller.
    Ça aurait été beau, aussi, que le résultat soit glorieux.

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 430
    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 430
    Par défaut
    D'où sort ce fameux "LaDate" ? Je ne vois aucune déclaration dans le code…

    D'ailleurs j'ai un peu de mal à comprendre la logique du code.
    Tu vérifies si CURRENT_TIMESTAMP est une date valide ?
    Je ne vois pas comment ce test peut être faux.

    Tatayo.

  5. #5
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 884
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 884
    Par défaut
    Citation Envoyé par tatayo Voir le message
    D'où sort ce fameux "LaDate" ? Je ne vois aucune déclaration dans le code…

    D'ailleurs j'ai un peu de mal à comprendre la logique du code.
    Tu vérifies si CURRENT_TIMESTAMP est une date valide ?
    Je ne vois pas comment ce test peut être faux.

    Tatayo.
    Ah oui, j'aurais dû préciser tout de suite, je l'ai ajouté après.
    Dans la table j'ai un champ (auquel il est fait allusion au début du fil), appelé LaDate, de type DateTime.
    C'est ce champ que dans une version précédente j'avais appelé DATE. Ça ne doit pas arriver souvent qu'on s'égare sur cette voie, car parmi les sites où le message d'erreur obtenu est mentionné, il n'y en a pas des masses qui parlent de mot réservé.
    J'avoue que dans un moment où j'ai la pêche je ne l'aurais pas faite, celle-là.

  6. #6
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 884
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 884
    Par défaut
    J'ai résolu autrement cette histoire de date par défaut, après avoir lu là :
    https://stackoverflow.com/questions/...e-for-a-column

    J'ai donc exécuté ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ALTER TABLE dbo.Tension
      ADD CONSTRAINT CONSTRAINT_DATE
        DEFAULT GETDATE() FOR LaDate
    Et ça marche.
    Je suppose qu'après ça je n'ai plus besoin de mon trigger.

    Par curiosité, il serait quand même bon de savoir si/quand on peut modifier un champ dans une table à l'aide du trigger exécuté pour la création d'enregistrement.
    Et si il y a des subtilités de syntaxe à connaître dans ce contexte.

    Je suppose que le titre "Modifier un champ Date par trigger INSERT" rendra mieux compte de quoi il s'agit.
    J'attends un peu pour ne pas dérouter.

  7. #7
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 430
    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 430
    Par défaut
    Si tu modifies tes messages après chaque réponse, la discussion devient difficile à suivre.
    Du coup je ne sais plus trop où on en est.

    Est-ce que tu as encore des messages d'erreur ?
    Si c'est le cas, le mieux est de nous montrer le code en question complet, dans nue nouvelle réponse, et avec le(s) message(s) en question.

    Tatayo.

  8. #8
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 602
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par Gluups Voir le message
    J'aimerais avoir un champ date avec pour valeur par défaut l'heure/date système.
    Bonjour

    Comme disaient les Shadoks Pourquoi faire simple quand on peut faire compliqué ?

    Nom : Sans titre.png
Affichages : 255
Taille : 133,3 Ko

    Il suffit d'ajouter la valeur par défaut dans le script DDL de création de la table, nul besoin de TRIGGER ici !

    Par ailleurs, les champs ce sont les zones d'un formulaire de saisie. Dans une table d'un SGBD relationnel, il n'y a pas de champs, il y a des colonnes.

  9. #9
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 884
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 884
    Par défaut
    Apparemment, vous deux, ça ne vous a pas tentés de lire le fil ?

Discussions similaires

  1. Réponses: 17
    Dernier message: 24/10/2006, 16h04
  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