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 :

Problème de condition d'un 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
    Novembre 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 24
    Par défaut Problème de condition d'un update !
    Bonjour,

    Je suis actuellement en train d'écrire une requete MSSQL pour mettre a jour une colonne d'une table répondant à une condition qui fonctionne très bien séparément sous forme d'un SELECT mais qui une fois mis en semble ne fonctionne pas correctement.

    Je m'explique:
    Ma requete classique affiche toutes les lignes d'une table commencent par HLS par exemple. Elle fonctionne bien avec la syntaxe suivante:
    SELECT ...
    FROM ...
    WHERE ...
    Tous s'affiche correctement.

    Maintenant je veux faire mon UPDATE:

    Je fais donc :
    UPDATE ...
    SET ...
    FROM ... le meme que celui de la requete précédente
    WHERE ... le meme que celui de la requete porécédente

    Conclusion:
    Ma requete fais bien le UPDATE, mais au lieu de mettre seulement les lignes concerné par le WHERE à jour elle mais toute la colonne à jour.

    Je ne comprend pas j'ai l'impression qu'elle ne prend pas en compte la condition puisqu'en résultat j'ai "1 row affected"!

    Pouvez-vous m'éclairer sur ce sujet. Je n'arrive pas a comprendre ce qui neconvient pas syntaxiquement à ma requete.

    Je peux également la copier si vous voulez mieux comprendre mon problème ou si je n'ai pas été suffisament clair.

    Merci pour vos réponses!

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Février 2004
    Messages
    862
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 862
    Par défaut
    Je ne suis pas certain de la tolérance de MSSQL aux syntaxes exotiques, mais il faudrait plutôt faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    
    UPDATE table
    SET column1 = value 1, column2 = value2, ...
    WHERE condition
    UPDATE SET FROM WHERE n'est pas correct à priori.

  3. #3
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 24
    Par défaut
    OK mais dans ce cas la ou est ce que je peux définir les tables du FROM?

    Il faut bien que les conditions de ma requete puisse aller chercher les tables de chaque attribut. Si j'enlève l'étape du FROM dans ma requete. Comment ma requete va-t-elle faire pour faire le lien entre les attributs des tables et les tables elle même qu'elle utilise dans la condition WHERE?

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Février 2004
    Messages
    862
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 862
    Par défaut
    Citation Envoyé par Keihilin Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    
    UPDATE table
    SET column1 = value 1, column2 = value2, ...
    WHERE condition
    ça aiderait peut être de voir ta requête complète...

  5. #5
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 24
    Par défaut
    Voila la requete qui liste ce dont j'ai besoins.

    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
    21
    22
    23
    24
    25
    26
    27
    SELECT	
    ItemType_name,	
    AMOModel_name,
    AMOModelVariant_name,
    Item_version,
    D.Delivery_name
    FROM
    AMOModelVariant AMV,
    AMOModel AMM,	
    ItemParents IP,
    Item I,
    ItemType IT,
    ItemStatus IST,
    ItemDelivery ID,
    Delivery D
    WHERE
    AMM.Program_id = 2
    AND AMV.AMOModel_id=AMM.AMOModel_id
    AND AMV.AMOModelVariant_id = IP.Parent_id
    AND D.Delivery_id = ID.Delivery_id
    AND ID.Item_id = I.Item_id
    AND IP.ParentType_id = 11
    AND IP.Item_id = I.Item_id 
    AND I.ItemType_id = IT.ItemType_id
    AND I.ItemStatus_id = IST.ItemStatus_id
    AND AMM.AMOModel_name = 'HLS'
    AND D.Delivery_name LIKE 'HLS_AC%'
    VOila mon UPDATE qui bug:

    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
    21
    22
    23
    24
    25
    UPDATE
    	AMOModelVariant 
    SET
    	AMOModelVariant_name = 'AC'
    FROM
    AMOModelVariant AMV,
    AMOModel AMM,	
    ItemParents IP,
    Item I,
    ItemType IT,
    ItemStatus IST,
    ItemDelivery ID,
    Delivery D
    WHERE
    AMM.Program_id = 2
    AND AMV.AMOModel_id=AMM.AMOModel_id
    AND AMV.AMOModelVariant_id = IP.Parent_id
    AND D.Delivery_id = ID.Delivery_id
    AND ID.Item_id = I.Item_id
    AND IP.ParentType_id = 11
    AND IP.Item_id = I.Item_id 
    AND I.ItemType_id = IT.ItemType_id
    AND I.ItemStatus_id = IST.ItemStatus_id
    AND AMM.AMOModel_name = 'HLS'
    AND D.Delivery_name LIKE 'HLS_AC%'
    Et voila ce que je viens de faire mais qui marche toujours pas:

    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
    UPDATE
    	AMOModelVariant
    SET
    	AMOModelVariant.AMOModelVariant_name = 'AC'
    WHERE
    AMOModel.Program_id = 2
    AND AMOModelVariant.AMOModel_id=AMOModel.AMOModel_id
    AND AMOModelVariant.AMOModelVariant_id = ItemParents.Parent_id
    AND Delivery.Delivery_id = ItemDelivery.Delivery_id
    AND ItemDelivery.Item_id = Item.Item_id
    AND ItemParents.ParentType_id = 11
    AND ItemParents.Item_id = Item.Item_id 
    AND Item.ItemType_id = ItemType.ItemType_id
    AND Item.ItemStatus_id = IST.ItemStatus_id
    AND AMM.AMOModel_name = 'HLS'
    AND Delivery.Delivery_name LIKE 'HLS_AC%'
    J'ai aussi essayé de mettre toute les tables après le UPDATE mais ca n'a pas marché!

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Février 2004
    Messages
    862
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 862
    Par défaut
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    UPDATE
    	AMOModelVariant 
    SET
    	AMOModelVariant_name = 'AC'
    WHERE
        AMOModelVariant_id IN (   
        SELECT	
        AMOModelVariant_id
        FROM
        AMOModelVariant AMV,
        AMOModel AMM,	
        ItemParents IP,
        Item I,
        ItemType IT,
        ItemStatus IST,
        ItemDelivery ID,
        Delivery D
        WHERE
        AMM.Program_id = 2
        AND AMV.AMOModel_id=AMM.AMOModel_id
        AND AMV.AMOModelVariant_id = IP.Parent_id
        AND D.Delivery_id = ID.Delivery_id
        AND ID.Item_id = I.Item_id
        AND IP.ParentType_id = 11
        AND IP.Item_id = I.Item_id 
        AND I.ItemType_id = IT.ItemType_id
        AND I.ItemStatus_id = IST.ItemStatus_id
        AND AMM.AMOModel_name = 'HLS'
        AND D.Delivery_name LIKE 'HLS_AC%' )
    pas garantie à 100%, j'ai la flemme de décortiquer quand les jointures sont faites comme ça, mais à priori ça devrait fonctionner.

  7. #7
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 24
    Par défaut
    La requete fonctionne mais encore une fois elle ne tient pas compte de la condition elle change toute la colonne d'un coup.

    Je comprend pas, pourtant syntaxiquement ca a l'air correct cette fois!

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

Discussions similaires

  1. Problème SQL avec conditions sur un UPDATE
    Par sebbilou dans le forum Langage SQL
    Réponses: 1
    Dernier message: 16/10/2008, 15h21
  2. [Debutant]Problème de condition
    Par ghan77 dans le forum Langage
    Réponses: 9
    Dernier message: 13/12/2005, 15h20
  3. Problème de condition, je flanche..
    Par KibitO dans le forum Langage
    Réponses: 13
    Dernier message: 11/11/2005, 12h57
  4. Réponses: 6
    Dernier message: 17/08/2005, 12h38
  5. Plusieur Condition dans REquette UPDATE
    Par ducseb dans le forum Langage SQL
    Réponses: 12
    Dernier message: 11/08/2005, 11h46

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