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 :

Modifier les 3 premiers chiffres dans tous les champs "NuméroDossier" d'une base "XYZ_ABC"


Sujet :

Développement SQL Server

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2012
    Messages : 30
    Points : 13
    Points
    13
    Par défaut Modifier les 3 premiers chiffres dans tous les champs "NuméroDossier" d'une base "XYZ_ABC"
    Bonjour à tous

    J'ai besoin de construire une requête SQL pour SQL-Server qui cherche dans une base de donnée (XXXX_AAA-BBBB) toutes les tables dans lesquelles se trouve le champs "NuméroDossier" pour ensuite remplacer tous les numéros de dossier (toutes les valeurs du champs) par le même chiffre avec les 3 premiers chiffres modifié selon mes besoins.

    Example :
    Base: XXXX_AAA-BBBB
    Toutes les tables: dbo.a, dbo.b, dbo.c, etc...
    Champ: "NuméroDossier"

    Valeurs a modifier: 100000008 => 489000008 .

    J'ai 5 Bases a modifier, donc je peux avoir deux variables, une pour la base et une autre pour les 3 chiffres a modifier dans le champs en question puisque je dois boucler sur toutes les tables.

    Je n'aurais ainsi qu'a modifier le nom de la base et les chiffres de 3 caractères a remplacer au début de la valeur.

    Example:

    chiffre: 489
    100000008 => 489000008

    chiffre: 456
    100000008 => 456000008

    chiffre: 123
    100000008 => 123000008


    etc...

    Pouvez-vous me pointer vers la bonne direction, éventuellement me faciliter la tâche avec un example de script (pardon).

    C'est urgent.

    Merci

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 786
    Points
    30 786
    Par défaut
    La modification ne peut se faire en une seule requête puisqu'il s'agit de modifier le contenu de plusieurs tables.
    Il faut en fait exécuter une requête pour chacune des tables à mettre à jour.
    Toutefois, cette opération peut être effectuée avec une procédure et du SQL dynamique (requête construite par le programme).

    Sur le principe, il faut :
    • Identifier les tables dans lesquelles existe la colonne recherchée
    • Pour chacune de ces tables
      • Préparer le texte de la requête qui effectuera la mise à jour
      • Exécuter la requête ainsi préparée
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2012
    Messages : 30
    Points : 13
    Points
    13
    Par défaut
    J’suis développeur, je connais les bases de la logique. ;D
    Quelqu'un a-t-il un Example de code SQL s’il vous plait ?

    Merci

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Décembre 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2020
    Messages : 11
    Points : 26
    Points
    26
    Par défaut Génération de code SQL
    Bonjour,
    Vous pouvez générer de code SQL dynamiquement via les tables système.
    Exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select 'Update ' + table_name +
    	' Set [NuméroDossier] = ''489'' + Substring([NuméroDossier],4,6) '  as SqlCmd
    from INFORMATION_SCHEMA.COLUMNS 
    where TABLE_NAME like '%'
    	and COLUMN_NAME like 'NuméroDossier'
    Ensuite, vous executez le code dans SSMS
    en espérant que ca vous mette sur la piste.
    Daniel

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2012
    Messages : 30
    Points : 13
    Points
    13
    Par défaut
    Merci Merci Merci

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Ca dépend également du type de données des colonnes NumDossier.
    Si c'est un entier le plus rapide sera de faire des opérations arithmétiques : select 100000008 + (489 - 100) * 1000000;

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2012
    Messages : 30
    Points : 13
    Points
    13
    Par défaut
    Bonjour messieurs

    J'en suis ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    USE "XXXXX_AA-ZZZZ-EE-RRRRRRRRRR"
     
    SELECT C.TABLE_NAME, C.COLUMN_NAME 
     
    FROM INFORMATION_SCHEMA.COLUMNS C
     
    WHERE EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES T 
     
                  WHERE T.TABLE_TYPE='BASE TABLE' AND C.TABLE_NAME=T.TABLE_NAME And (C.COLUMN_NAME='NuméroDossier' OR C.COLUMN_NAME='NumérosDossier' OR C.COLUMN_NAME='NumDoss' OR C.COLUMN_NAME='NumeroDossierGalpe' OR C.COLUMN_NAME='NumeroDossier'))
     
    ORDER BY C.TABLE_NAME, C.COLUMN_NAME
    Maintenant j'ai besoin de récupérer tout les chiffres à l'intérieur.

  8. #8
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Attention aussi, si la colonne à modifier est de type (var)char, comment faut-il procéder à la substitution si la longueur effective du contenu n'est pas constante ?

    Par exemple :
    100000008 => 489000008
    mais
    10000008 => 489000008 ou 4890000008 ?
    et que faut il faire si le nombre d'origine est très petit : 12 => ?

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Décembre 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2020
    Messages : 11
    Points : 26
    Points
    26
    Par défaut Génération de code SQL
    Pour récupérer les numéros, il faut passer par la génération de code SQL
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT 'Select ' + C.COLUMN_NAME + ' From ' + C.TABLE_NAME as SQLCmd
    FROM INFORMATION_SCHEMA.COLUMNS C inner join
    	INFORMATION_SCHEMA.TABLES T on
    		C.TABLE_NAME=T.TABLE_NAME and
    		T.TABLE_TYPE='BASE TABLE'
    WHERE C.COLUMN_NAME in ('NuméroDossier','NumérosDossier','NumDoss','NumeroDossierGalpe','NumeroDossier')
    ORDER BY C.TABLE_NAME, C.COLUMN_NAME
    Pour faire la mise à jour, reprendre le code tel que suggéré précédemment.
    Daniel

  10. #10
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2012
    Messages : 30
    Points : 13
    Points
    13
    Par défaut
    Merci, J'ai du mal a interpréter le résultat.

    En effet j'ai une seul colonne résultat "SQLCmd" avec... je pense la commande afin de sélectionner singulièrement la colonne ou il faut faire la modification.

    J'imagine qu'il me suffit maintenant d'exécuter le update avec le résultat ???

    Merci
    Cordialement

Discussions similaires

  1. Réponses: 7
    Dernier message: 18/06/2019, 16h24
  2. [PostgreSQL] Modifier les champs dans la bdd postgresql avec php
    Par zohit dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 29/09/2014, 13h33
  3. [TCD] Modifier les champs d'un TCD
    Par Commodore dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/06/2007, 17h11
  4. [VBA-E] Modifier les propriétés d'un control par une routine
    Par formath dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 04/03/2007, 10h45
  5. modifier les champs d'une table
    Par zidenne dans le forum Bases de données
    Réponses: 1
    Dernier message: 27/10/2005, 15h22

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