Tengo este csv llamado test.csv con el siguiente contenido
1,"test user",,,4075619900,example@example.com,"Aldelo for Restaurants","this is my deal",,"location4" 2,"joe johnson",,"32 bit",445555519,antle@gmail.com,"Restaurant Pro Express","smoe one is watching u",,"some location"
Aquí está mi ARCHIVO SQL para hacer el inserto BULK
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
pero lo que está sucediendo es que solo inserta un logging y toda la información del segundo logging se inserta en el campo de location en el primer logging
id,name,department,architecture,phone,email,download,comments,company,location 1,"test user",NULL,NULL,4075619900,example@example.com,"Aldelo for Restaurants","this is my deal",NULL,"""location4""2,""joe johnson"",,""32 bit"",445555519,antle@gmail.com,""Restaurant Pro Express"",""smoe one is watching u"",,""some location"""
Supongo que el problema es el ROWTERMINATOR
pero probé todos estos
ROWTERMINATOR = '\n' ROWTERMINATOR = '\r\n' ROWTERMINATOR = '\r'
y todos los mismos resultados … cualquier idea sobre cómo solucionar esto
Estoy creando el csv así a través de PHP
Creo que el problema es que su file csv usa \n
como EOL (modo Unix). BULK INSERT en SQL Server es "inteligente" e incluso si especifica ROWTERMINATOR
como \n
, que en teoría debería resolver su problema, lo antepone con \r
por lo que termina con \r\n
como terminador de fila.
Intenta usar ROWTERMINATOR='0x0A'
. En este caso, SQL Server no realiza ningún truco de magia y simplemente usa el valor que ha establecido como terminador de fila.
Funciona para mi. 🙂
CHAR (124) es | y CHAR (10) es \ n
Probablemente necesites CHAR(13)
y CHAR(10)
como Row Terminator