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

Signaler
Messages postés
2
Date d'inscription
mardi 27 août 2002
Statut
Membre
Dernière intervention
16 février 2010
-
Messages postés
2
Date d'inscription
mardi 27 août 2002
Statut
Membre
Dernière intervention
16 février 2010
-
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

Messages postés
39
Date d'inscription
mardi 21 décembre 2004
Statut
Membre
Dernière intervention
15 février 2010

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.
Messages postés
2
Date d'inscription
mardi 27 août 2002
Statut
Membre
Dernière intervention
16 février 2010

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