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 :

[MSSQL 7.0]Problème d'update


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 32
    Par défaut [MSSQL 7.0]Problème d'update
    Bonjour,
    mon update ne fonctionne pas correctement.
    Le but de ce code est de mettre à jour un champ en fonction de sa valeur et des valeurs de références d'une autre table.

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    UPDATE res_activity
    SET 	Status = CASE WHEN Status IS NOT NULL THEN ER.OMS
    			ELSE CASE WHEN StartDate < REPLACE(CONVERT(CHAR(10),GETDATE(),102),'.','-')
    				THEN 'COMPLETED' ELSE 'IN PROGRESS' 
    				END
    			END
    FROM ref_event ER
    WHERE Status = ER.SF
    Comportement actuel :
    Lorsque que le champ Status contient une valeur contenue dans ma table de référence (ref_event), le champ se met correctement à jour.
    Mais quand la valeur est NULL, rien ne se passe.

    Or je souhaiterais avoir une mise à jour lorsque le champ est NULL (conformément à ce que je spécifie dans mon CASE WHEN).

    Auriez-vous une petite puce à me mettre à l'oreille ...
    Merci !

  2. #2
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 228
    Billets dans le blog
    25
    Par défaut
    le STATUS étant la clé de jointure entre les deux tables, c'est un comportement normal.
    Faites-le en 2 passes.
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 356
    Par défaut
    Je pense que la requête suivante pourrait fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    UPDATE res_activity
    SET 	STATUS = CASE WHEN AC.STATUS IS NOT NULL THEN ER.OMS
    			ELSE CASE WHEN StartDate < REPLACE(CONVERT(CHAR(10),GETDATE(),102),'.','-')
    				THEN 'COMPLETED' ELSE 'IN PROGRESS' 
    				END
    			END
    FROM ref_event ER, res_activity AC
    WHERE AC.STATUS = ER.SF
    Il faut redéfinir la table res_activity dans la partie FROM de ton update sinon il ne pourras pas effectuer de jointure.

    Coridalement,
    Nicolas L.

  4. #4
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 228
    Billets dans le blog
    25
    Par défaut
    WHEN AC.STATUS IS NOT NULL
    ne sera jamais invoqué puisque la clause de jointure ne prendra que les champs dont status n'est pas null
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  5. #5
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 32
    Par défaut
    Effectivement,

    n'ayant pas de solution immédiate, j'ai décidé d'effectuer la tache en deux fois.
    Grâce à Fadace, je sais maintenant pourquoi cela ne marche pas en une seule fois.

    Merci à Fadace et Madinico (j'ai essayé ta solution mais j'ai toujours le même problème) pour leur réponses techniques qui m'ont fait avancer mon schmiblick !

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

Discussions similaires

  1. [MySQL] problème requête UPDATE
    Par oceane751 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 23/10/2005, 18h28
  2. problème de Update
    Par cyrill.gremaud dans le forum ASP
    Réponses: 7
    Dernier message: 29/08/2005, 20h58
  3. [C#] [Oracle] Problème d'Update
    Par _Air_ dans le forum Windows Forms
    Réponses: 12
    Dernier message: 06/04/2005, 13h56
  4. Problème requete update
    Par krfa1 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/03/2005, 08h47
  5. problème pour updater une BD
    Par yoda_style dans le forum ASP
    Réponses: 6
    Dernier message: 17/03/2005, 10h56

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