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 :

Format des type de données


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 142
    Points : 77
    Points
    77
    Par défaut Format des type de données
    Voila, J'avais un probleme pour une importation de données à partir d'un fichier texte

    J'utilisai une tâche de flux de données (source de fichier plat vers une destination SQL Server)
    Suite a un soucis, J'ai décidé d'utiliser la tâche d'insertion en bloc... Cela fonctionne, mais :

    j'ai des problèmes avec mes paramétrages de format. Mes booléens ('True' , 'False') doivent être changé en (0 ou 1) et mes float ne doivent plus utiliser des virgules mais des points ...

    J'aimerai savoir comment on change les paramètres de SQL Server afin de pouvoir définir les types de données selon les formats régionnaux...

    merci

  2. #2
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

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

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    tu as

    pour les dates SET DATEFORMAT
    pour les . SET LANGAGE
    Errare humanum est, perseverare diabolicum (Sénèque)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 356
    Points : 406
    Points
    406
    Par défaut
    Pour résoudre ce genre de problèmes, j'utilise la méthode suivante :
    J'importe le fichier dans une table de traitement n'ayant que des champs varchar. Puis j'insert les données dans la table destination via un INSERT ... SELECT .... en effectuant les transformations nécessaires dans la liste des champs de mon select.
    Dans ton cas cela donne :
    INSERT INTO maTable (liste des champs)
    SELECT CASE chVraiFaux WHEN 'Vrai' THEN 1 ELSE 0 END, autres champs FROM tableTravail WHERE ....

    Je crois qu'il y a d'autres méthodes. La mienne est relativement contraingnante car elle demande la création de table de travail.
    Bon courage pour la suite.

  4. #4
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 142
    Points : 77
    Points
    77
    Par défaut
    j'ai essayé "SET Language" ... sans résultat. Pour être plus clair, je dois executer la requête : puis je lance ma tache SSIS.

    Cependant j'obtient la même erreur, qui est :
    [Tâche d'insertion en bloc] Erreur : « Une erreur s'est produite avec le message d'erreur suivant :
    « Erreur de conversion des données à charger en bloc (incompatibilité de type ou caractère non valide pour la page de codes spécifiée) pour la ligne 5, colonne 62 (mt_cde).
    Erreur de conversion des données à charger en bloc (incompatibilité de type ou caractère non valide pour la page de codes spécifiée) pour la ligne 3, colonne 62 (mt_cde).
    Erreur de conversion des données à charger en bloc (incompatibilité de type ou caractère non valide pour la page de codes spécifiée) pour la ligne 2, colonne 62 (mt_cde)
    Je précise un peu plus :
    mes fichiers utilisent des virgules pour les décimales. Mais ça ne passe pas. En les remplaçant dans le fichier par des point, cela fonctionne. Cependant lorsque que je visualise le résultat dans management studio les nombres apparraissent avec des virgules...
    Le champ est typé en float.

  5. #5
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 142
    Points : 77
    Points
    77
    Par défaut
    merci Madinico pour ta proposition. Cependant mon problème se situe principalement sur l'aspect des "." et des "," pour les nombres décimaux.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 356
    Points : 406
    Points
    406
    Par défaut
    Peux-tu préciser la teneur de ton problème sur les décimaux ?
    Peut-être que la fonction isnumeric pourrais t'aider ?

    En ateendant plus de détails.
    Bon courage pour la suite.

  7. #7
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 142
    Points : 77
    Points
    77
    Par défaut
    Pas de problème :

    J'ai extrait d'une base de données Progress les données d'une table nommée 'histoent'. Dans cette table se trouve un champ nommé 'mt_cde'.
    Pour préparer l'import j'ai créé une table, nommée DP_Histoent, qui représente la destination de mon import. J'ai aussi créé un gestionnaire de connexion (dans lequel je défini que cette colonne est de type float (R8) )

    Dans mon fichier texte le champ mt_cde est sous la forme : 546,56

    Avant j'utilisait une tache de flux de donnée pour réaliser l'import de donnée (et cela fonctionnait). finalement je dois utiliser la tache d'insertion en bloc parce que je ne pouvait pas utiliser la tache de flux de données. Mais mon problème maintenant c'est que j'ai une erreur lors l'import des données de ce champ. il n'accepte pas les virgules comme séparateur décimal, mais les points.

    Selon moi :
    La virgule comme séparateur decimal est un paramètre regional.
    Et le point est un paramètre américain.
    L'erreur montre que le gestionnaire fonctionne (déjà testé)

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 356
    Points : 406
    Points
    406
    Par défaut
    Je ne pense pas que ton problème viennent de l'utilisation de "." ou de ",".
    Lorsqu'on teste avec la fonction isnumeric des décimaux :
    isnumeric('10.25') ou isnumeric('10,25'), on obtient le même résultat 1 qui indique que se sont bien des numériques.
    Peux tu détailler ton insertion en bloque ? Est-ce que tu utilises un Insert Select dynamique ?.
    Bon courage pour la suite.

  9. #9
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 142
    Points : 77
    Points
    77
    Par défaut
    Je precise que mon insertion en bloc fonctionne lorsque je remplace dans le fichier texte les "," par des "." pour ce champ.

    Concernant mon insertion en bloc, il s'agit d'un travail de SSIS dans Visual Studio. Dans lequel je renseigne la table de destination et le gestionnaire de connexion au fichier plat.

    Je n'ai donc pas fait de insert select dynamique...

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 356
    Points : 406
    Points
    406
    Par défaut
    Quel est le séparateur de champ que tu utilises. Si c'est la virgule il est normal que cela plante. Sinon je ne vois pas d'où peut venir le problème.
    Bon courage pour la suite.

  11. #11
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 142
    Points : 77
    Points
    77
    Par défaut
    mon séparateur est la tabulation ....
    Tant pis... En tout cas merci pour ton aide !

  12. #12
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 142
    Points : 77
    Points
    77
    Par défaut
    Je vous explique pourquoi je souhaitai utiliser ce travail :

    j'utilisais un flux de données , qui fonctionnait parfaitement... Enfin qui me disait que j'avais bien transféré 120 000 lignes.. Seulement ô grand bonheur : la requete count(*) sur la table me donne 30 000...

    Ensuite, je veux utiliser la tâche d'insertion en bloc me donne : erreur sur le formatage des données... et pas moyen de contourner l'erreur...

    ça me fait haluciné parce que , peut importe le moyen que j'utilise, ça ne marche pas ....

    sur ce, quelqu'un pourrait il me donner un moyen d'effectuer mon opération ?

  13. #13
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Points : 1 216
    Points
    1 216
    Par défaut
    ça me fait haluciné parce que , peut importe le moyen que j'utilise, ça ne marche pas
    si, apparemment ça fonctionne lorsque tu changes les virgules en point non ?

    Dans la commande BCP (commande système SQL Server te permettant de charger un fichier dans une table), tu as l'option

    -R

    Specifies that currency, date, and time data is bulk copied into SQL Server using the regional format defined for the locale setting of the client computer. By default, regional settings are ignored.

    qui te permet de forcer ce genre de choses. Par contre cette option n'a pas d'équivalent sous SSIS (bulk insert) il me semble.

    si tu bloques total essaie toujours la commande bcp (dans une fenêtre cmd) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    bcp <base>..<table> in <ton fichier> -c -U<login> -P<password> -S<servername> -R
    Emmanuel T.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/09/2009, 11h58
  2. Utilisation des types de données bit dans SQL Server
    Par yanal dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 08/05/2008, 15h19
  3. [PEAR][SOAP] Support des types de données complexes
    Par elendil dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 05/12/2007, 11h58
  4. Extension des Types de Données(CHAR,CLOB)
    Par blackstreet dans le forum Oracle
    Réponses: 9
    Dernier message: 28/04/2006, 23h39
  5. Réponses: 2
    Dernier message: 22/09/2003, 12h23

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