1. #1
    Candidat au Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    juin 2018
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2018
    Messages : 1
    Points : 2
    Points
    2

    Par défaut Update un champ avec une ligne de commande select case when

    Bonjour,

    Je souhaiterai updater un champ type datetime d'une table avec une requête SQL

    En gros je souhaite partir de la date d'écriture pour recalculer la date d'échéance en appliquant les conditions de règlement de la fiche client.

    j'ai dans un premier temps rédiger une requête SELECT

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT
    CASE RT_Condition WHEN 1 THEN EOMONTH (JM_DATE+RT_Nbjour+EC_Jour-1) ELSE (JM_DATE+RT_Nbjour+EC_Jour-1) END AS ECHEANCE
    FROM F_ECRITUREC RIGHT OUTER JOIN F_REGLEMENTT
    ON F_REGLEMENTT.CT_NUM =F_ECRITUREC.CT_NUM
    WHERE Jo_NUM is not NULL
    j'ai obtenu le résultat escompté.
    2018-05-18 00:00:00.000
    2018-06-30 00:00:00.000
    2018-06-30 00:00:00.000
    2018-06-30 00:00:00.000
    2018-06-30 00:00:00.000
    2018-06-30 00:00:00.000
    2018-06-30 00:00:00.000
    2018-06-30 00:00:00.000
    2018-06-30 00:00:00.000
    2018-06-30 00:00:00.000
    2018-06-30 00:00:00.000
    2018-06-30 00:00:00.000


    j'ai donc voulu faire un update de mon champ échéance avec ce select

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    UPDATE [dbo].[F_ECRITUREC]
       SET F_ECRITUREC.N_Reglement = (SELECT
    CASE RT_Condition WHEN 1 THEN EOMONTH (JM_DATE+RT_Nbjour+EC_Jour-1) ELSE (JM_DATE+RT_Nbjour+EC_Jour-1) END AS ECHEANCE
    FROM F_ECRITUREC RIGHT OUTER JOIN F_REGLEMENTT
    ON F_REGLEMENTT.CT_NUM =F_ECRITUREC.CT_NUM
    WHERE Jo_NUM is not NULL)
     
    GO
    voici le message d'erreur que j'obtient
    Msg*257, Niveau*16, État*3, Ligne*17
    Implicit conversion from data type datetime to smallint is not allowed. Use the CONVERT function to run this query.

    j'ai bien compris qu'il faut convertir resultat de ma sous-requete en DATETIME mais je ne sais pas où mettre la ligne de commande.

    Pouvez-vous m'aider?

    Merci d'avance

  2. #2
    Membre émérite
    Femme Profil pro
    dba
    Inscrit en
    juillet 2007
    Messages
    3 964
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : juillet 2007
    Messages : 3 964
    Points : 2 685
    Points
    2 685

    Par défaut

    faut apprendre le sql !
    C'Est moins pire comme ça, mais faut mettre le bon alias sur TOUTES les colonnes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE ECR
    SET ECR.N_Reglement = CASE ALIAS.RT_Condition WHEN 1 THEN ******** ELSE ********** END
    FROM [dbo].[F_ECRITUREC] AS ECR
    RIGHT OUTER JOIN dbo.F_REGLEMENTT AS REG ON REG.CT_NUM =ECR.CT_NUM
    WHERE ALIAS.Jo_NUM is not NULL
    Après regarde la fonction DATEADD, parce que l'addition de datetime avec des chiffres, c'est comme pas évident.

Discussions similaires

  1. Réponses: 3
    Dernier message: 10/11/2014, 16h47
  2. Réponses: 2
    Dernier message: 17/05/2014, 13h08
  3. Réponses: 4
    Dernier message: 14/08/2009, 12h22
  4. execute un programe avec une ligne de commande
    Par Babylonne dans le forum C++Builder
    Réponses: 4
    Dernier message: 19/09/2006, 12h36
  5. Réponses: 2
    Dernier message: 21/05/2006, 09h30

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