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

Administration SQL Server Discussion :

Export BCP / Import BULK INSERT :


Sujet :

Administration SQL Server

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Export BCP / Import BULK INSERT :
    Bonjour,

    Voici mon cas :


    j'ai une base de données SQL Server sur un serveur A, et je veux importer le contenu des tables de cette base dans des tables vides d'une autre BDD sur un autre serveur B.

    J’ai donc exporté mes données à l’aide de BCP à l’aide de l’option –N. J’ai choisi cette option (elle n’est peut-être pas idéale…) car mes tables peuvent contenir des champs ntext avec des caractères du types « é », « à » etc…

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BCP BASE_A.dbo.TABLE1 out E:\Fichier.txt -t '|' -r \n -SserveurA -Ulogin -Pmdp -N -e E:\erreur_Fichier.txt
    Mon problème se pose à l’import dans l’autre BDD du second serveur. J’utilise BULK INSERT comme suit :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    bulk insert tampon_Table1 from  E:\Fichier.txt  with ( datafiletype='widenative',fieldterminator='|', rowterminator='\n',firstrow=1)

    Voici mon message d’erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    « Serveur : Msg 4866, Niveau 17, État 66, Ligne 1
    Échec de l'insertion en bloc. Colonne trop longue dans le fichier de données pour la ligne 1, colonne 1. Assurez-vous que la fin de champ et la fin de ligne sont correctement spécifiées. »
    Pour info, le 1er champs de ma table est de format nvarchar(32)
    Voici le contenu de la première ligne de mon fichier .txt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @ 0 1 4 8 7 b d e 8 1 5 a 4 e 0 8 b f 6 0 e 1 d 7 0 3 6 d 6 d 0 e |  |  |  |  |  |  |  |
    Je ne comprends pas ce qui pose problème dans la lecture du fichier…

    Pour info, je ne suis pas très à l’aise avec le choix des options suivantes:
    Pour le BCP : -c ou –w ou –N Ainsi que –C code_page
    Pour le BULK INSERT : codepage ACP ou OEM ou RAW ainsi que DATAFILETYPE char, Natif, widechar, widenative
    Si vous avez des explications sachant que je suis débutante !

    Merci d’avance pour votre aide ! je ne cache pas que je suis sur un projet court en délai

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 758
    Points : 1 069
    Points
    1 069
    Par défaut
    Essayes de sortir la table sans rowterminator, et la réimporter sans rowterminator. Pour info de mon côté un bcp out -t'|' -N suivi d'un bcp in -t'|' -N fonctionne avec les données que tu nous as fournies.
    David B.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 758
    Points : 1 069
    Points
    1 069
    Par défaut
    Bon alors finalement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BCP BASE_A.dbo.TABLE1 out E:\Fichier.txt -t '|' -r \n -SserveurA -Ulogin -Pmdp -w -e E:\erreur_Fichier.txt
    suivi de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bulk INSERT tampon_Table1 FROM  E:\Fichier.txt  WITH ( datafiletype='widechar',fieldterminator='|', rowterminator='\n',firstrow=1)
    En résumé, utliser widechar plutôt que widenative. cf http://msdn.microsoft.com/en-us/library/ms188365.aspx:
    "(...)
    widenative: Native (database) data types, except in char, varchar, and text columns, in which data is stored as Unicode. Create the widenative data file by bulk importing data from SQL Server using the bcp utility.
    (...)"
    David B.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Merci pour votre aide. J’ai eu également l’occasion de tester l’import par BCP. Cependant j’ai des contraintes qui me sont imposées et je dois passer par bulk insert.

    Si je comprends bien votre 2nd message, vous m’indiquez de remplacer l’argument –N par l’argument –w ?
    J’avais également pu tester cette solution et elle fonctionne bien. Cependant, d’après l’aide en ligne –N est « une option qui remplace avantageusement –w ». C’est pour cela que j’ai utilisé –N. Idem pour l’utilisation de widenative vs widechar, qui d’après l’aide est « une alternative plus performante » et correspond à mon cas « transférer des données d’un server SQL Server à un autre ».

    Mais je n’ai peut-être pas la bonne réflexion et comme j’ai pu l’indiquer, je suis novice sur le sujet...

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 758
    Points : 1 069
    Points
    1 069
    Par défaut
    Tu as raison, j'avais mal interprété la note.

    Est-ce que le fait d'utiliser widechar est beaucoup plus pénalisant ? Je ne m'explique pas pourquoi SQL Server sort une erreur même en ne chargeant qu'une seule ligne.
    David B.

Discussions similaires

  1. [2K5] BULK INSERT / BCP / Unicode / BOM / UTF-16
    Par mioux dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 20/11/2009, 15h11
  2. Réponses: 3
    Dernier message: 13/08/2009, 10h47
  3. Import csv via bulk insert
    Par DanaX dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 15/11/2008, 19h03
  4. [BULK INSERT] import de certaines colonnes uniquement
    Par _Eric_ dans le forum Développement
    Réponses: 1
    Dernier message: 12/10/2008, 00h55
  5. Réponses: 2
    Dernier message: 21/03/2007, 11h15

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