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 :

UPDATE SET FROM


Sujet :

Développement SQL Server

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 41
    Points : 34
    Points
    34
    Par défaut UPDATE SET FROM
    Bonjour,

    J'essaie de mettre à jour une série d'enregistrements à partir d'un autre.
    Pour ce faire, j'utilise un UPDATE SET FROM WHERE

    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
     
    update creature 
                                set creature.gender_id = c.gender_id, creature.sexe_id = c.sexe_id,
                                    creature.alignment_id = c.alignment_id, creature.allegiance_id = c.allegiance_id, creature.animation_id = c.animation_id,
                                    creature.general_id = c.general_id, creature.race_id = c.race_id, creature.classe_id = c.classe_id, creature.kit_id = c.kit_id,
                                    creature.apr_id = c.apr_id, creature.morale = c.morale, creature.morale_break = c.morale_break, creature.movement_speed = c.movement_speed, 
                                    creature.level1 = c.level1, creature.level2 = c.level2, creature.level3 = c.level3, creature.caster_level = c.caster_level,
                                    creature.max_hp = c.max_hp, creature.current_hp = c.current_hp, creature.hp_bonus = c.hp_bonus, creature.armor_class = c.armor_class, 
                                    creature.thaco = c.thaco, creature.experience = c.experience, creature.save_death = c.save_death, creature.save_wands = c.save_wands,
                                    creature.save_poly = c.save_poly, creature.save_breath = c.save_breath, creature.save_spell = c.save_spell,
                                    creature.strength = c.strength, creature.strength_bonus = c.strength_bonus, creature.strength_3rd = c.strength_3rd, creature.dexterity = c.dexterity,
                                    creature.dexterity_3rd = c.dexterity_3rd, creature.constitution = c.constitution, creature.constitution_3rd = c.constitution_3rd,
                                    creature.intelligence = c.intelligence, creature.wisdom = c.wisdom, creature.charisma = c.charisma, creature.class_flag = c.class_flag, 
                                    creature.hide_shadow = c.hide_shadow, creature.move_silently = c.move_silently, creature.detect_illusion = c.detect_illusion,
                                    creature.set_trap = c.set_trap, creature.crushing_ac = c.crushing_ac, creature.missile_ac = c.missile_ac, creature.piercing_ac = c.piercing_ac, 
                                    creature.slashing_ac = c.slashing_ac, creature.resist_cold = c.resist_cold, creature.resist_magic_cold = c.resist_magic_cold, 
                                    creature.resist_fire = c.resist_fire, creature.resist_magic_fire = c.resist_magic_fire, creature.resist_acid = c.resist_acid, 
                                    creature.resist_electricity = c.resist_electricity, creature.resist_magic = c.resist_magic, creature.resist_crushing = c.resist_crushing, 
                                    creature.resist_slashing = c.resist_slashing, creature.resist_piercing = c.resist_piercing, creature.resist_missile = c.resist_missile
                                from creature c
                                where c.id = '_KAHRK' and creature.id in (select cre.id from creature cre where cre.id in ('TEST'))
    J'obtiens l'erreur:
    The multi-part identifier "creature.id" could not be bound.

    Si je retire le préfixe creature, l'id utilisé sera celui de mon autre table creature (alias c).
    Je n'arrive pas non plus à mettre un alias sur la table mise à jour (UPDATE creature c ou UPDATE creature as c)

    Bref, je me demande s'il est vraiment possible de le faire de cette manière.
    Au pire, je pourrai toujours le faire avec des sous requêtes, mais vu le nombre de champs, j'aurais préféré une solution plus élégante.

  2. #2
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Bonjour,

    Vous voulez faire quoi exactement avec cette requête ?
    Quelle est l'idée ?

    ++

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 41
    Points : 34
    Points
    34
    Par défaut
    Il s'agit de mettre à jour les données d'un ensemble de créature à partir d'une créature donnée.

    WHERE c.id = '_KAHRK' : correspond à la créature source

    AND creature.id IN (SELECT cre.id FROM creature cre WHERE cre.id IN ('TEST')) : correspond aux créatures à mettre à jour

    L'écriture la plus communément utilisée est:
    update creature
    set classe = (select c.classe from creature c where c.id = 'KAHRK')
    where id IN (SELECT cre.id FROM creature cre WHERE cre.id IN ('TEST'))

    Mais comme j'ai un grand nombre de champs à mettre à jour, j'ai tenté de l'écrire différemment. Soit l'ajout d'un FROM dans l'update pour récupérer les données de la créature source


    Citation Envoyé par mikedavem Voir le message
    Bonjour,

    Vous voulez faire quoi exactement avec cette requête ?
    Quelle est l'idée ?

    ++

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 41
    Points : 34
    Points
    34
    Par défaut
    Voilà la solution, je n'étais pas loin!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    update creature
    set creature.prof_lsword = c.prof_lsword, creature.prof_ssword = c.prof_ssword, creature.prof_axe = c.prof_axe,
    creature.prof_blunt = c.prof_blunt, creature.prof_bow = c.prof_bow, creature.prof_missile = c.prof_missile,
    creature.prof_spear = c.prof_spear, creature.prof_spike = c.prof_spike
    from creature, creature c
    where c.id = '{0}' and creature.id in {1}

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

Discussions similaires

  1. Update Set Select From
    Par lamen0031 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 23/09/2011, 14h16
  2. update set = (..) OU update from (..) where
    Par mister3957 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 26/08/2011, 07h45
  3. [Requête SQL] Optimisation de plusieurs UPDATE SET FROM
    Par dens19 dans le forum Développement
    Réponses: 6
    Dernier message: 13/03/2009, 16h51
  4. [2K5]Syntaxe Update Set From Join Group by
    Par Monstros Velu dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/10/2007, 10h57
  5. Réponses: 2
    Dernier message: 02/12/2005, 17h40

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