2011-09-13 3 views
10

J'ai ce csv nommé test.csv avec le contenu ci-dessousinsert en vrac question rowterminator

1,"test user",,,4075619900,[email protected],"Aldelo for Restaurants","this is my deal",,"location4" 
2,"joe johnson",,"32 bit",445555519,[email protected],"Restaurant Pro Express","smoe one is watching u",,"some location" 

Voici mon fichier SQL pour faire le VRAC insérer

USE somedb 
GO 

CREATE TABLE CSVTemp 
(id INT, 
name VARCHAR(255), 
department VARCHAR(255), 
architecture VARCHAR(255), 
phone VARCHAR(255), 
email VARCHAR(255), 
download VARCHAR(255), 
comments TEXT, 
company VARCHAR(255), 
location VARCHAR(255)) 
GO 

BULK 
INSERT CSVTemp 
FROM 'c:\test\test.csv' 
WITH 
(
FIELDTERMINATOR = ',', 
ROWTERMINATOR = '''+CHAR(124)+''+CHAR(10)+''' 
) 
GO 
--Check the content of the table. 
SELECT * 
FROM CSVTemp 
GO 

mais ce qui se produit est sa seule insertion un enregistrement et toutes les informations du deuxième enregistrement sont insérées dans le champ de localisation sur le premier enregistrement

id,name,department,architecture,phone,email,download,comments,company,location 
    1,"test user",NULL,NULL,4075619900,[email protected],"Aldelo for Restaurants","this is my deal",NULL,"""location4""2,""joe johnson"",,""32 bit"",445555519,[email protected],""Restaurant Pro Express"",""smoe one is watching u"",,""some location""" 

Je suppose que le problème est le ROWTERMINATOR mais j'ai essayé tous ces

ROWTERMINATOR = '\n' 
ROWTERMINATOR = '\r\n' 
ROWTERMINATOR = '\r' 

et tous les mêmes résultats ... toutes les idées sur la façon de résoudre ce

Je crée le csv comme this via PHP

+0

Avez-vous essayé '\ n \ r'? D'où vient le fichier CSV? Est-il possible qu'il y ait un caractère non-impression à la fin de la ligne? –

+0

Je le génère via PHP sur le serveur ... Je vais mettre à jour ma question – Trace

+1

Peut-être montrer le PHP que vous utilisez pour générer le CR + LF. –

Répondre

25

Je pense que problème est que votre fichier csv utilise \n comme EOL (chemin unix). BULK INSERT dans SQL Server est "intelligent" et même si vous spécifiez ROWTERMINATOR comme \n, ce qui en théorie devrait résoudre votre problème, il l'ajoute avec \r de sorte que vous finissez avec \r\n comme terminateur de ligne.

Essayez d'utiliser ROWTERMINATOR='0x0A'. Dans ce cas, SQL Server n'effectue aucun tour de magie et utilise simplement la valeur que vous avez définie comme terminateur de ligne.
Fonctionne pour moi. :)

+0

Vous pouvez utiliser un format spécial pour marquer le code.Plus d'informations dans l'aide markdown.On trouve une bonne réponse pour un premier –

+0

Si seulement j'avais plus d'un upvote à donner ... Merci Przemek Ptasznik –

+0

J'ai passé quelques heures sur cette question! Vous avez sauvé ma journée, merci! Quelle stupide fonctionnalité "intelligente"! – graycrow