web-dev-qa-db-fra.com

Erreur "La colonne est trop longue" erreur avec BULK INSERT

J'essaie d'exécuter la commande suivante pour insérer en bloc des données à partir d'un fichier CSV -

 BULK INSERT TestDB.dbo.patent
 FROM 'C:\1patents.csv'
 WITH (FIRSTROW = 1,  FIELDTERMINATOR = '^', ROWTERMINATOR='\n');

L'erreur que je reçois est this--

Msg 4866, niveau 16, état 1, ligne 1
Le chargement en bloc a échoué. La colonne est trop longue dans le fichier de données pour la ligne 1, colonne 6.
Vérifiez que le terminateur de champ et le terminateur de ligne sont spécifiés correctement.
Msg 7399, niveau 16, état 1, ligne 1
Le fournisseur de base de données OLE "BULK" du serveur lié "(null)" a signalé une erreur. Le fournisseur n'a donné aucune information sur l'erreur.
Msg 7330, Niveau 16, Etat 2, Ligne 1
Impossible d'extraire une ligne du fournisseur de base de données OLE "BULK" pour le serveur lié "(null)".

Maintenant, ce sont les données dans la première ligne-- 

 00000001^^18360713^295^4^0

Et dans la table, le dernier champ (correspondant à la 6ème colonne de données ci-dessus = 0) est de type 'int'.

Qu'est-ce que je fais mal ici? Pourquoi est-ce que je reçois l'erreur ci-dessus?

19
Arvind

J'ai eu l'extraction d'Oracle/Unix. J'ai remplacé \r\n par ROWTERMINATOR = '0x0a' et cela a fonctionné pour moi.
Merci beaucoup !

43
Fabien Cousin

Comme indiqué ci-dessus, j'ai eu le même problème lors de l'importation d'un fichier csv dans SQL Server. J'utilisais ROWTERMINATOR = '\n' et j'ai aussi essayé d'utiliser '\r\n' et '\r'. Aucun d'entre eux a travaillé.

Mais lorsque vous utilisez ROWTERMINATOR = '0x0a', la table est chargée sans problèmes.

Je ne connais pas le "pourquoi?" derrière cela, j'espère que quelqu'un d'autre pourra nous éclairer.

16
comendeiro

À moins que le fichier source soit Unix, il y a de fortes chances que le terminateur de ligne du fichier soit réellement

\ r\n

Utilisez un éditeur hexadécimal pour valider le terminateur du fichier ou essayez-le simplement comme terminateur de ligne.

4
Eric J.

J'ai rencontré le même problème et j'ai appris que, à moins que le fichier ne soit de type UNIX,\r\n est correct.

Lorsque vous générez le fichier de format ( .fmt ou .xml ), remarquez la 3ème colonne de gauche. sa appelée longueur min de colonne. Parfois, le serveur SQL le définit par défaut sur 2 bien que vous ne le mentionniez pas dans le script de création. Remplacez cette valeur par 0 . Parfois, vous devrez peut-être aussi autoriser la valeur NULL, aussi changez-le en zéro et cela devrait fonctionner maintenant

1
Sai Bhasker Raju