2013-01-16 10 views
13

Je suis en train d'exécuter la commande suivante pour insérer des données en vrac à partir d'un CSV file--« La colonne est trop longue » erreur avec VRAC INSERT

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
La charge en bloc a échoué. La colonne est trop longue dans le fichier de données pour la ligne 1, colonne 6.
Vérifiez que la terminaison de zone et la terminaison de ligne sont correctement spécifiées.
Msg 7399, niveau 16, état 1, ligne 1
Le fournisseur OLE DB "BULK" pour le serveur lié "(null)" a signalé une erreur. Le fournisseur n'a donné aucune information sur l'erreur.
Msg 7330, niveau 16, état 2, ligne 1
Impossible de récupérer une ligne du fournisseur OLE DB "BULK" pour le serveur lié "(null)".

Maintenant, ce sont les données de la première row--

00000001^^18360713^295^4^0 

Et dans le tableau le dernier champ (Corresp. À la 6e colonne de données ci-dessus = 0) est de type « int '.

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

+1

Habituellement, les problèmes concernent les délimiteurs de ligne. Vérifiez vos délimiteurs correctement. –

Répondre

2

À moins que le fichier source est Unix, les chances sont de terminaison de ligne du fichier est vraiment

\ r \ n

Soit utiliser un éditeur hexadécimal pour valider la terminaison du fichier, ou tout simplement essayer en tant que terminateur de ligne.

+0

J'ai essayé d'utiliser la terminaison suggérée par vous - mais obtenant toujours la même erreur? Pls laissez-moi savoir si vous avez d'autres idées pour aider à résoudre ce ... merci .... – Arvind

+12

Une réponse ici: http://stackoverflow.com/a/4207050/706578 suggère d'utiliser ROWTERMINATOR = '0x0a' si '\ n'or '\ r \ n' ne fonctionne pas pour vous. Cela a fonctionné pour moi! –

29

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

+0

Cela a fonctionné pour moi. Merci (: – Sonu

13

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 n'a travaillé.

Mais lors de l'utilisation ROWTERMINATOR = '0x0a' la table chargée sans problèmes.

Je ne connais pas le "pourquoi?" derrière cela, j'espère que quelqu'un d'autre peut faire la lumière dessus.

0

J'ai fait face au même problème et j'ai appris que si le fichier est UNIX, le type est correct.

Lorsque vous générez le fichier de format (.fmt ou .xml), notez la 3ème colonne à partir de la gauche. son appelé min longueur de la colonne. Parfois, le serveur sql le fait par défaut à bien que vous ne le mentionniez pas dans le script de création. Changez cette valeur en .Parfois, vous devrez peut-être également autoriser NULL, alors changez-le à zéro et cela devrait fonctionner maintenant