Проблема с массовым вставлением rowterminator

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

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"

Вот мой SQL FILE, чтобы сделать BULK insert

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

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

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

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

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

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

Я создаю csv как this через PHP

Ответ 1

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

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