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

  1. #21
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 40
    Points : 47
    Points
    47
    Par défaut
    C'est vrai que c'est un peu bizarre mais c'est comme ça que les gars de microsoft disent de faire :

    ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.en/tsqlref9/html/40e63302-0c68-4593-af3e-6d190181fee7.htm

    Du coup moi je dis Amen du moment que ça marche

  2. #22
    Futur Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 24
    Points : 6
    Points
    6
    Par défaut
    Ca marche toujours pas ...

    Sinon je me demandais. Peut etre que je pourrais passer par une page php pour executer ma requête. Je retourne la requete select qui marche bien dans une variable et apres je fais un update sur le résultat? Ca pourrait marcher?

  3. #23
    Membre averti Avatar de Sacha999
    Inscrit en
    Mars 2007
    Messages
    294
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mars 2007
    Messages : 294
    Points : 350
    Points
    350
    Par défaut
    Tu aurais pas 2 tables "AMOModelVariant" dans ta base?
    une "dbo" et une autre avec ton login?

  4. #24
    Membre averti Avatar de Sacha999
    Inscrit en
    Mars 2007
    Messages
    294
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mars 2007
    Messages : 294
    Points : 350
    Points
    350
    Par défaut
    Y'a un erreur dans ta requete, la table a un Alias mais tu ne t'en sert pas.
    Gwendoline, dans ton UPDATE fait un UPDATE "alias" au lieu de UPDATE AMOMODELVariant, ou "alias" correspont a l'alias que tu a donné a la table dans ta requete, au moins pour etre sur que le UPDATE est executer sur al bonne table

    Citation Envoyé par maverickbj Voir le message
    Salut Gwendolyne,

    J'ai essayé cette syntaxe chez moi ça semble faire ce dont tu as besoin.
    Attention si tu fais des join inutiles c'est normal que ça te change toute la colonne. Il faut que tu limites tes join aux tables sur lesquelles tu vas filtrer. Ta requête devrait du coup donner ça.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    UPDATE AMOModelVariant
    SET AMOModelVariant.AMOModelVariant_name = 'AC'
    FROM AMOModelVariant AS MV 
    JOIN AMOModel AS M ON M.AMOModel_id=MV.AMOModel_id
    JOIN ItemParents AS IP ON IP.Parent_id=MV.AMOModelVariant_id
    JOIN ItemDelivery AS ID ON ID.Item_id=IP.Item_id
    JOIN Delivery AS DEL ON DEL.Delivery_id=ID.Delivery_id
    WHERE MV.AMOModel_name='HLS'
    AND DEL.Delivery_name LIKE 'HLS_AC%'
    AND IP.ParentType_id=11
    Je pense que ça devrait fonctionner n'hésite pas aussi à revoir tes conditions peut être que tu zappes quelque chose ou que tes filtres ne sont pas bons.

    Bon Courage

  5. #25
    Futur Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 24
    Points : 6
    Points
    6
    Par défaut
    J'ai éssayé ca!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    UPDATE MV
    SET MV.AMOModelVariant_name = 'AC'
    FROM AMOModelVariant AS MV
    JOIN AMOModel AS M ON M.AMOModel_id=MV.AMOModel_id
    JOIN ItemParents AS IP ON IP.Parent_id=MV.AMOModelVariant_id
    JOIN ItemDelivery AS ID ON ID.Item_id=IP.Item_id
    JOIN Delivery AS DEL ON DEL.Delivery_id=ID.Delivery_id
    WHERE M.AMOModel_name='HLS'
    AND DEL.Delivery_name LIKE 'HLS_AC%'
    AND IP.ParentType_id=11
    Ca marche toujours pas et en plus ya écrit (2 rows affected)! Je ne sais absolument pas quelle est la deuxième colonne changée. Par contre toujours pareil pour la colone en question elle est intégralement changée.

  6. #26
    Inscrit

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

    Informations forums :
    Inscription : Février 2004
    Messages : 862
    Points : 1 229
    Points
    1 229
    Par défaut
    bon...

    Lance cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT  *	
        FROM    AMOModelVariant AMV
                JOIN AMOModel AMM ON AMM.AMOModel_id = AMV.AMOModel_id
                JOIN ItemParents IP ON IP.Parent_id = AMV.AMOModelVariant_id
                JOIN Item I ON I.Item_id = IP.Item_id
                JOIN ItemDelivery ID ON ID.Item_id = I.Item_id
                JOIN Delivery D ON D.Delivery_id = ID.Delivery_id
        WHERE   AMM.Program_id = 2
                AND IP.ParentType_id = 11
                AND AMM.AMOModel_name = 'HLS'
                AND D.Delivery_name LIKE 'HLS_AC%'
    puis sauve le résultat dans un fichier Excel ou XML (ou ce que tu veux) sans oublier les en-têtes de colonnes et poste-le ici.

    Si en plus tu peux nous mettre un screen ou une liste des tables de ta BD, ça peut aussi aider.

  7. #27
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 40
    Points : 47
    Points
    47
    Par défaut
    Effectivement il manque un filtre dans la requête que je t'ai envoyé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    UPDATE MV
    SET AMOModelVariant.AMOModelVariant_name = 'AC'
    FROM AMOModelVariant AS MV 
    JOIN AMOModel AS M ON M.AMOModel_id=MV.AMOModel_id
    JOIN ItemParents AS IP ON IP.Parent_id=MV.AMOModelVariant_id
    JOIN ItemDelivery AS ID ON ID.Item_id=IP.Item_id
    JOIN Delivery AS DEL ON DEL.Delivery_id=ID.Delivery_id
    WHERE MV.AMOModel_name='HLS'
    AND DEL.Delivery_name LIKE 'HLS_AC%'
    AND IP.ParentType_id=11
    AND M.Program_id = 2
    ça devrait aller mieux.

    Sinon 2 rows affected ça veut dire 2 lignes affectées pas 2 colonnes (Je sais pas si c'est une faute de frappe de ta part?)

    Essai de rafraichir ta base pour voir les modifications ou ferme et réouvre la fenêtre où tu vois les lignes de ta table sinon tu vois pas les modifications. Ca m'étonnerait qu'il te dise 2 rows affected et qu'il modifie toute la colonne de la table à moins qu'il y ait que 2 lignes dans ta table

    Bon courage

  8. #28
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 40
    Points : 47
    Points
    47
    Par défaut
    Sacha,

    Pour l'alias effectivement dans un select tu es obligé de l'utiliser partout mais apparament dans un update avec cette syntaxe c'est pas le cas.
    J'ai essayé ces 2 requêtes et le 2 marches aussi bien l'une que l'autre. En tous cas pas la table que tu mets à jour.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    UPDATE ST
    SET Fax='00000000'
    FROM dbo.eServices_Store AS ST 
    JOIN dbo.eServices_UsersInStore AS UIST ON UIST.StoreId=ST.StoreId
    JOIN dbo.aspnet_Users AS US ON US.UserId=UIST.UserId
    WHERE US.UserName='022276'
    et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    UPDATE dbo.eServices_Store
    SET Fax='00000000'
    FROM dbo.eServices_Store AS ST 
    JOIN dbo.eServices_UsersInStore AS UIST ON UIST.StoreId=ST.StoreId
    JOIN dbo.aspnet_Users AS US ON US.UserId=UIST.UserId
    WHERE US.UserName='022276'
    Par contre je sais pas si il y en a un qui est mieux que l'autre.

  9. #29
    Membre averti Avatar de Sacha999
    Inscrit en
    Mars 2007
    Messages
    294
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mars 2007
    Messages : 294
    Points : 350
    Points
    350
    Par défaut
    Ah ok désolé, je suis etonné pour la 2eme requete, faudra que je teste de les propres yeux quand je serai au taff

  10. #30
    Futur Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 24
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Après plusieurs semaines de réflexion, je suis revenu sur ce problème pour constater que j'avais fait une erreur. En effet je n'ai pas défini le nom du modelvariant 'AC' dans la base de donnée. Maintenant que ceci est ajouté la requête fonctionne mieux mais me retourne cette fois un autre message d'erreur.

    "Cannot update identity column"

    En effet j'essai de changer l'id de la colone. Or d'après ce message c'est impossible. Ya-t-il donc un moyen de dupliquer la ligne en question puis de supprimer l'ancienne ligne? Ou de contourner ce problème?

    Merci d'avance pour vos réponses!

    La requête que j'ai utilisé et qui m'a retournée le message d'erreur est la suivante:

    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
     
    UPDATE
    	AMOModelVariant
    SET
    	AMOModelVariant_id = 566
    WHERE
        AMOModelVariant_id IN (  
        SELECT  AMOModelVariant.AMOModelVariant_id
        FROM    AMOModelVariant
                JOIN AMOModel ON AMOModel.AMOModel_id = AMOModelVariant.AMOModel_id
                JOIN ItemParents ItemParents ON ItemParents.Parent_id = AMOModelVariant.AMOModelVariant_id
                JOIN Item ON Item.Item_id = ItemParents.Item_id
                JOIN ItemDelivery ON ItemDelivery.Item_id = Item.Item_id
                JOIN Delivery ON Delivery.Delivery_id = ItemDelivery.Delivery_id
        WHERE   AMOModel.Program_id = 2
                AND ItemParents.ParentType_id = 11
                AND AMOModel.AMOModel_name = 'HLS'
                AND Delivery.Delivery_name LIKE 'HLS_AC%'
       )

  11. #31
    Futur Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 24
    Points : 6
    Points
    6
    Par défaut
    Ça y'est après 3 mois, j'ai enfin trouvé une solution à mon problème.
    Je ne pouvais pas updaté ma table car j'essayais de mettre à jour une clé primaire qui était utilisé par deux autres tables de ma base de données.

    A la place j'ai donc modifié les deux autres tables qui utilisaient cet identifiant.
    Et voila le tour est joué!

    Merci tout de même pour votre aide, elle m'aura permit de simplifier grandement mes requêtes sql!


+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

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