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

Langage SQL Discussion :

[SQL Server 2000] UPDATE sur tous les champs de ma table


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 43
    Points : 42
    Points
    42
    Par défaut [SQL Server 2000] UPDATE sur tous les champs de ma table
    Bonjour,

    J'ai un petit soucis. J'ai une table contenant beaucoup de champs et je voudrait faire un update sur tous les champs sans avoir à faire autant de requetes que de champs.

    J'ai une table comme ceci:

    Table1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Champs1    Champs2      Champs3     etc..
    --------     --------      ---------    -----
    Valeur1      12345          7885
    Valeur1      256855        -1E-284
    Valeur1      -1E56          448855
    En fait je veux remplacer tous les nombres compris entre -0.01 et 0.01 par 0.

    Pour cela actuellement je fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    UPDATE Table1 
    SET Champs2=0 
    WHERE Champs2<0.01 AND Champs2>-0.01
     
    UPDATE Table1 
    SET Champs3=0 
    WHERE Champs3<0.01 AND Champs3>-0.01
    Bien évidement j'ai bien plus de champs.
    De plus je doit faire ça sur plein de tables.

    Comment je pourrais faire pour faire ça en une seule requete?

    Je vous remercie par avance de vos réponses.

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Quel est le SGBD ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mars 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mars 2006
    Messages : 400
    Points : 562
    Points
    562
    Par défaut
    Pour le faire en une seule requête, tu peux essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE Table1 SET
    Champ2=IF(Champs2<0.01 AND Champs2>-0.01,0,Champ2),
    Champ3=IF(Champs3<0.01 AND Champs3>-0.01,0,Champ3)

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 738
    Points
    11 738
    Par défaut
    En SQL standardisé, il faut remplacer le IF par un CASE WHEN. En outre, le AND peut être avantageusement remplacé par un BETWEEN :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UPDATE Table1 
    SET Champ2 = CASE 
      WHEN Champs2 BETWEEN -0.01 AND 0.01 THEN 0 
      ELSE Champ2 
    END,
    Champ3=...

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut Curseur + SQLDA
    D'après ce que je lis, il y a beaucoup de tables et chaque table à beaucoup de colonnes à mettre à jour.
    C'est sans doute plus complexe qu'un simple update, fût-il avec CASE...WHEN, mais il me semble qu'en créant une procédure qui utiliserait un curseur et la SQLDA pour obtenir les colonnes de chaque table, on pourrait en faire un cas général.
    On passerait le nom de la table à la procédure et, via la SQLDA, on testerait le contenu de chaque colonne. Si ce contenu between -0.01 and 0.01 THEN 0 .
    Et ainsi de suite pour chaque table.

  6. #6
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Et l'idée d'écrire une requête qui irait dans le catalogue pour générer automatiquement la(les) requête(s) de mise à jour ?

    Du SQL qui génère du SQL quoi !

    C'est un peu l'idée de Mercure je pense ...

  7. #7
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 738
    Points
    11 738
    Par défaut
    Perso, j'utiliserait un outil externe comme Excel, Perl ou PHP pour générer mon SQL de correction.

    Ensuite, je placerais des triggers sur toutes les colonnes concernées afin que la base n'enregistre que des valeurs corrigées. Le SQL de création des triggers peut être généré par le même outil externe que le SQL correctif.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 43
    Points : 42
    Points
    42
    Par défaut
    Merci de vos réponses.

    Le SGBDR est SQL server 2000.

    Mais effectivement j'ai beaucoup de tables avec beaucoup de champs.

    10 tables avec 38 champs à modifier...

  9. #9
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut Luc
    Luc,

    En effet, aller consulter le catalogue des tables ou utiliser la SQLDA procède du même principe. Toutefois, ton idée me paraît meilleure car la définition des zones est déjà connue au travers des catalogues, ce qui permettriat d'éviter l'overhead consécutif au DESCRIBE dans le cas d'utilisation de la SQLDA.

Discussions similaires

  1. UPDATE sur tous les champs en même temps > saisie rapide ?
    Par sendme dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 30/01/2011, 11h52
  2. Faire un UPDATE sur tous les champs ?
    Par pasc06 dans le forum Langage
    Réponses: 8
    Dernier message: 03/12/2008, 10h28
  3. requete ajout caractere sur tous les champs d'une table
    Par lorenzo74 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 24/06/2006, 13h34
  4. [SQL Server] Requete update sur 2 champs
    Par galou10 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 21/02/2006, 20h22

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