Bulk insert avec 2 types de lignes dans un même fichier

cs_remit Messages postés 2 Date d'inscription mardi 27 août 2002 Statut Membre Dernière intervention 16 février 2010 - 11 févr. 2010 à 15:41
cs_remit Messages postés 2 Date d'inscription mardi 27 août 2002 Statut Membre Dernière intervention 16 février 2010 - 16 févr. 2010 à 11:41
Bonjour,

je souhaite charger un fichier dans une table SQLServer 2005 à l'aide de l'instruction "BULK INSERT".

J'ai une première ligne à charger dans une table (entêtes) et les autres dans une autre table (lignes).

Le problème c'est que 2 types de lignes ont des formats différents (pas le même nombre de colonne).

Du coup, quand je charge les lignes, il ne charge jamais la première ligne car il considère que l'entête + la première ligne ne font qu'une seule ligne.

Quelqu'un connait une méthode pour contourner ce problème ?

code sql :

BULK INSERT Clients_entete FROM 'c:\clients.txt'
WITH (
FIELDTERMINATOR = ''|'',
ROWTERMINATOR = ''|\n'',
CODEPAGE = ''ACP'',
DATAFILETYPE = ''char'',
FIRSTROW = 1,
LASTROW = 1)

BULK INSERT Clients_lignes FROM 'c:\clients.txt'
WITH (
FIELDTERMINATOR = ''|'',
ROWTERMINATOR = ''|\n'',
CODEPAGE = ''ACP'',
DATAFILETYPE = ''char'',
FIRSTROW = 2)

2 réponses

hymnuade Messages postés 39 Date d'inscription mardi 21 décembre 2004 Statut Membre Dernière intervention 15 février 2010
15 févr. 2010 à 16:04
Bonjour,

Es-tu sur que la première ligne d'en-tête se finit bien par le pipe | attendu par le row terminator ?

Pour exemple, si j'exécute
BULK INSERT Test FROM 'c:\clients.txt'
WITH (
FIELDTERMINATOR = '|',
ROWTERMINATOR = '|\n',
CODEPAGE = 'ACP',
DATAFILETYPE = 'CHAR',
FIRSTROW = 2)

sur un fichier de contenu
ID|ID2|ID3
1|1|
2|2|

seule la ligne 2 est prise en compte,

mais si
ID|ID2|ID3|
1|1|
2|2|
alors les lignes 1 et 2 sont bien importées

Peut importe le nombre de colonne pour le BULK INSERT si la ligne différente n'est pas prise en compte dans la mesure ou la fin de la ligne à éviter est clairement identifiable.
0
cs_remit Messages postés 2 Date d'inscription mardi 27 août 2002 Statut Membre Dernière intervention 16 février 2010
16 févr. 2010 à 11:41
Effectivement, j'ai essayé ton code et cela fonctionne. Mais moi j'ai toujours le problème.

J'ai l'impression que cela fonctionne uniquement quand il y a plus de colonne dans l'entête que dans les lignes.

Si je modifie mon entête pour ajouter des colonnes et en avoir plus que les lignes, cela fonctionne.

quelqu'un connait-il une méthode pour contourner ce problème ?

Pour le moment, j'ai ajouté des colonnes à mon entête mais ce n'est pas vraiment une solution
0