Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Administration
Administration Forum d'entraide sur l'administration du dataserver, via SSM ou ligne de commande, les tables système, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/11/2010, 12h26   #1
Invité de passage
 
Inscription : octobre 2010
Messages : 3
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 3
Points : 0
Points : 0
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 :
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 :
bulk INSERT tampon_Table1 FROM  E:\Fichier.txt  WITH ( datafiletype='widenative',fieldterminator='|', rowterminator='\n',firstrow=1)

Voici mon message d’erreur :
Code :
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 :
@ 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
nsjnsj est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2010, 15h27   #2
Membre chevronné
 
David BAFFALEUF
Inscription : février 2008
Messages : 605
Détails du profil
Informations personnelles :
Nom : David BAFFALEUF
Localisation : France

Informations forums :
Inscription : février 2008
Messages : 605
Points : 733
Points : 733
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.
dbaffaleuf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2010, 15h51   #3
Membre chevronné
 
David BAFFALEUF
Inscription : février 2008
Messages : 605
Détails du profil
Informations personnelles :
Nom : David BAFFALEUF
Localisation : France

Informations forums :
Inscription : février 2008
Messages : 605
Points : 733
Points : 733
Bon alors finalement:

Code :
BCP BASE_A.dbo.TABLE1 out E:\Fichier.txt -t '|' -r \n -SserveurA -Ulogin -Pmdp -w -e E:\erreur_Fichier.txt
suivi de

Code :
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.
dbaffaleuf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2010, 16h32   #4
Invité de passage
 
Inscription : octobre 2010
Messages : 3
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 3
Points : 0
Points : 0
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...
nsjnsj est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2010, 18h08   #5
Membre chevronné
 
David BAFFALEUF
Inscription : février 2008
Messages : 605
Détails du profil
Informations personnelles :
Nom : David BAFFALEUF
Localisation : France

Informations forums :
Inscription : février 2008
Messages : 605
Points : 733
Points : 733
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.
dbaffaleuf est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h27.


 
 
 
 
Partenaires

Hébergement Web