Массовая вставка проблема rowterminator

у меня есть этот csv с именем test.csv с содержанием ниже

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"

вот мой файл SQL, чтобы сделать массовую вставку

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:testtest.csv'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '''+CHAR(124)+''+CHAR(10)+'''
)
GO
--Check the content of the table.
SELECT *
FROM CSVTemp
GO

но что происходит, это только вставка одной записи, и вся информация из второй записи вставляется в поле местоположения на первой записи

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

Я предполагаю, что проблема ROWTERMINATOR но я пробовал все эти

ROWTERMINATOR = 'n'
ROWTERMINATOR = 'rn'
ROWTERMINATOR = 'r'

и все те же результаты ...любые идеи о том, как исправить это

Я создаю csv, как этой через PHP

2 ответов


Я думаю, проблема в том, что ваш файл csv использует \n Как EOL (путь unix). Массовая вставка в SQL Server является "умной", и даже если вы укажете ROWTERMINATOR as \n, который теоретически должен решить вашу проблему, он добавляет ее с \r Так что вы в конечном итоге с \r\n как признак конца строки.

попробуйте использовать ROWTERMINATOR='0x0A'. В этом случае SQL Server не выполняет никаких магических трюков и просто использует значение, заданное в качестве Терминатора строк.
Работать на меня. :)


CHAR (124) is | и CHAR(10) is \n

вы, вероятно, нужно CHAR(13) и CHAR(10) как Терминатор строки

http://www.techonthenet.com/ascii/chart.php