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 :

Apostrophes et espaces dans des noms d'attributs


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 100
    Points : 57
    Points
    57
    Par défaut Apostrophes et espaces dans des noms d'attributs
    Bonjour,

    Je construis une nouvelle base de données, en récupérant des données dans une ancienne base de données.

    Problème: le gars qui avait construit l'ancienne base de données il y a 10-15 ans a mis des apostrophes et des espaces dans ses noms d'attributs... Par exemple dans la table Clients, il y a un attribut qui s'appelle Date d'insertion au jo

    Du coup j'ai des problèmes avec la syntaxe de ma requête... L'idée, ça serait de faire ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO asso (num_ancien, sigle, nom_complet, buts, date_jo, ss_site)
    SELECT Code client, Sigle, Intitulé, But social, Date d'insertion au jo, Site Internet FROM Clients
    Bien sûr, ça ne passe pas, j'ai essayé ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO asso (num_ancien, sigle, nom_complet, buts, date_jo, ss_site)
    SELECT 'Code client', Sigle, Intitulé, 'But social', 'Date d''insertion au jo', 'Site Internet' FROM Clients
    en doublant le ' et en mettant des ' autour des attributs avec des espaces, mais ça ne passe toujours pas...

    Merci d'avance!

    [edit] Je suis sur une base de données MySQL

  2. #2
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 100
    Points : 57
    Points
    57
    Par défaut
    J'ai essayé ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO asso (num_ancien, sigle, nom_complet, buts, date_jo, ss_site)
    SELECT 'Code client', Sigle, Intitulé, 'But social', 'Date d\'insertion au jo', 'Site Internet' FROM Clients
    et ça me dit #1062 - Duplicate entry '0' for key 1

    Pourtant je n'ai pas d'auto-increment sur aucun des champ que j'utilise dans ma requête (j'ai cru voir que c'était un problème du genre...)

  3. #3
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonjour,

    Tu as essayé [ et ] ?

  4. #4
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 100
    Points : 57
    Points
    57
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO asso (num_ancien, sigle, nom_complet, buts, date_jo, ss_site) SELECT [Code client, Sigle, Intitulé, But social, Date d\'insertion au jo, Site Internet] FROM Clients
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO asso (num_ancien, sigle, nom_complet, buts, date_jo, ss_site)
    SELECT [Code client], [Sigle], [Intitulé], [But social], [Date d\'insertion au jo], [Site Internet] FROM Clients
    -> Il me dit apostrophe non fermé (pour les deux)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO asso (num_ancien, sigle, nom_complet, buts, date_jo, ss_site)
    SELECT ['Code client', 'Sigle', 'Intitulé', 'But social', 'Date d\'insertion au jo', 'Site Internet'] FROM Clients
    -> Il me dit juste qu'il y a erreur de syntaxe

  5. #5
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Salut,
    je ne suis pas sure mais est ce que tu as le droit de mettre des accents dans ta requête ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO asso (num_ancien, sigle, nom_complet, buts, date_jo, ss_site)
    SELECT ['Code client', 'Sigle', 'Intitulé', 'But social', 'Date d\'insertion au jo', 'Site Internet'] FROM Clients
    Si je me trompe désolée...

  6. #6
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 100
    Points : 57
    Points
    57
    Par défaut
    Bah justement, c'est un peu mon problème, je ne sais pas ce à quoi j'ai droit et ce à quoi je n'ai pas droit.
    Et ce à quoi j'ai droit, je sais pas la syntaxe pour que ça passe...

    Parce que si ça peut pas se faire, il va falloir que je me tape tous les champs des tables de la base de données pour enlever les espaces, les accents, les apostrophes, etc.

    Si quelqu'un a une astuce pour pouvoir faire ce genre de remplacement automatiquement, je suis preneur aussi (du coup je peux écrire une requête classique)

  7. #7
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Pour les accents suffit d'utiliser les collations, sinon pour tes apostrophes ou tes espaces mes ton champs entre crochets...

  8. #8
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 100
    Points : 57
    Points
    57
    Par défaut
    J'ai mis ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO asso (num_ancien, sigle, nom_complet, buts, date_jo, ss_site)
    SELECT [Code client], [Sigle], [Intitule], [But social], [Date d'insertion au jo], [Site Internet] FROM Clients
    et j'ai ça en réponse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ERROR: Apostrophe non fermé @ 138
    STR: '
    SQL: INSERT INTO asso (num_ancien, sigle, nom_complet, buts, date_jo, ss_site)
    SELECT [Code client], [Sigle], [Intitule], [But social], [Date d'insertion au jo], [Site Internet] FROM Clients
    ...
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[Code client], [Sigle], [Intitule], [But social], [Date d'insertion au jo], [Sit' at line 2 
    Pourtant je mets bien les crochets comme il faut? J'ai essayé aussi en mettant \ devant le ' de Date d'insertion au JO mais j'ai la même erreur

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 500
    Points : 639
    Points
    639
    Par défaut
    J'ai pas de solution à te donner sur MySQL, mais quand même, il faudrait retrouver le mec qui a fait ça pour qu'il rende ses payes...
    C'est un peu grâce à des gens comme ça qu'on dit toujours que l'informatique ça ne marche pas : là c'est vraiment une caricature insoutenable !

  10. #10
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    avez vous utilisez les doubles quotes ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    INSERT INTO asso (num_ancien, sigle, nom_complet, buts, date_jo, ss_site)
    SELECT
        'Code client', 
        Sigle, 
        Intitulé, 
        'But social', 
        "Date d'insertion au jo", 
        'Site Internet' 
    FROM Clients
    Bon courage

  11. #11
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 920
    Points : 51 712
    Points
    51 712
    Billets dans le blog
    6
    Par défaut
    Vous ne nous avez pas dit quel SGBDR vous employé. Certains SGBDR ne peuvent en aucun cas accepter des noms d'objet aussi foireux.
    N'oubliez pas que SQL est une norme et implique de respecter des règles. Si votre base a été si mal architecturée, notamment en en respectant pas les règles de l'art, il est probable que le SGBDR sur lequel vous voulez porter la base de données soit dans l'incapacité à le faire !

    Lisez ce que j'ai écrit à ce sujet : http://sqlpro.developpez.com/cours/s...age=partie1#L1

    A +

  12. #12
    J1
    J1 est déconnecté
    Membre averti Avatar de J1
    Inscrit en
    Mai 2004
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 321
    Points : 335
    Points
    335
    Par défaut
    Bonsoir,

    sous MySQL, le caractère permettant de délimiter les identifiants est ` (le guillemet oblique).
    Dans certains cas de figure (tout dépend des modes MySQL que tu actives), tu peux aussi utiliser " (le guillemet).

    Toutes les explications sur le site de MySQL.

  13. #13
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 100
    Points : 57
    Points
    57
    Par défaut
    OK ça marche nickel avec les ` !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    INSERT INTO asso (num_ancien, sigle, nom_complet, buts, date_jo, ss_site)
    SELECT
        `Code client`, 
        Sigle, 
        Intitulé, 
        `But social`, 
        `Date d'insertion au jo`, 
        `Site Internet` 
    FROM Clients
    Merci bien, et sur vos conseils, je vais maintenant passer ma journée à essayer de retrouver le responsable de ces noms d'attributs...

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/01/2012, 16h43
  2. Faut-il utiliser des underscores ou des espaces dans les noms des fichiers ?
    Par Invité dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 07/05/2008, 20h23
  3. Afficher des images avec des espaces dans le nom
    Par Space Cowboy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 15/03/2007, 08h18
  4. support des espaces dans les noms de fichiers
    Par menuge dans le forum Langage
    Réponses: 9
    Dernier message: 25/10/2006, 10h02
  5. suppression des espaces dans les noms de fichiers
    Par menuge dans le forum Général Python
    Réponses: 8
    Dernier message: 22/10/2006, 13h01

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