批量插入rowterminator问题

Mat*_*iby 10 php sql sql-server bulkinsert sql-server-2008

我有这个名为test.csv的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"
Run Code Online (Sandbox Code Playgroud)

这是我的SQL FILE来执行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
Run Code Online (Sandbox Code Playgroud)

但最新发生的是它只插入一条记录,第二条记录中的所有信息都插入到第一条记录的位置字段中

  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"""
Run Code Online (Sandbox Code Playgroud)

我认为问题是ROWTERMINATOR但我尝试了所有这些

ROWTERMINATOR = '\n'
ROWTERMINATOR = '\r\n'
ROWTERMINATOR = '\r'
Run Code Online (Sandbox Code Playgroud)

以及所有相同的结果......关于如何修复此问题的任何想法

我创建像CSV 这样通过PHP

小智 25

我认为问题是你的csv文件使用\nEOL(unix方式).SQL Server中的BULK INSERT是"智能"的,即使你指定ROWTERMINATOR\n理论上应该解决你的问题,它也会预先设置为\r最终的\r\n行结束符.

尝试使用ROWTERMINATOR='0x0A'.在这种情况下,SQL Server不执行任何魔术技巧,只使用您设置为行终止符的值.
适合我.:)