2011-09-13 5 views
10

ho questo CSV denominato test.csv con il contenuto sottoinserimento di massa problema 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" 

Ecco il mio file SQL per fare l'Inserimento di massa

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 

ma che cosa sta accadendo è il suo unico inserimento un record e tutte le informazioni del secondo record vengono inserite nel campo posizione sul primo record

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""" 

Suppongo che il problema è la ROWTERMINATOR ma ho provato tutti questi

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

e tutti gli stessi risultati ... tutte le idee su come risolvere questo

sto creando il csv come this tramite PHP

+0

Hai provato '\ n \ r'? Da dove viene il file CSV? È possibile che ci sia un carattere non stampabile alla fine della riga? –

+0

lo sto generando via php sul server ... aggiornerò la mia domanda – Trace

+1

Forse mostrerò il PHP che stai usando per generare il CR + LF. –

risposta

25

penso problema è che il file CSV utilizza \n come (modo unix) EOL. BULK INSERT in SQL Server è "intelligente" e anche se si specifica ROWTERMINATOR come \n, che in teoria dovrebbe risolvere il problema, viene anteposto allo \r in modo da finire con \r\n come terminatore di riga.

Provare a utilizzare ROWTERMINATOR='0x0A'. In questo caso, SQL Server non esegue trucchi magici e utilizza solo il valore impostato come terminatore di riga.
Funziona per me. :)

+0

È possibile utilizzare il formato speciale per contrassegnare il codice Ulteriori informazioni nella guida per il markdown Sembra una buona risposta per una prima –

+0

Se solo avessi più di un upvote da dare ... Grazie Przemek Ptasznik –

+0

Ho trascorso alcune ore su questo tema! Mi hai salvato la giornata Grazie, che stupida caratteristica "intelligente"! – graycrow