我将此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"
这是我执行BULK插入的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:\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,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 = '\r\n'
ROWTERMINATOR = '\r'
以及所有相同的结果......关于如何修复此问题的任何想法
我正在通过PHP
创建像this这样的csv答案 0 :(得分:25)
我认为问题是你的csv文件使用\n
作为EOL(unix方式)。 SQL Server中的BULK INSERT是“智能的”,即使您将ROWTERMINATOR
指定为\n
,理论上它应该解决您的问题,它会在\r
前面加上\r\n
,因此您最终得到ROWTERMINATOR='0x0A'
1}}作为行终止符。
尝试使用{{1}}。在这种情况下,SQL Server不执行任何魔术技巧,只使用您设置为行终止符的值 适合我。 :)
答案 1 :(得分:1)