批量插入SQL Server中的字段中包含换行符的CSV

dan*_*anb 1 sql-server csv bulkinsert

我有一个看起来像这样的csv:

"blah","blah, blah, blah
ect, ect","column 3"
"foo","foo, bar, baz
more stuff on another line", "another column 3"
Run Code Online (Sandbox Code Playgroud)

是否可以将其直接导入SQL服务器?

Luk*_*sik 5

文件中的每一行都以新行(\n)结束,但您想要获得的实际行以引号和新行结束.在BULK INSERT命令中将ROWTERMINATOR设置为:

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

编辑:我认为更大的问题将在文本中使用逗号.SQL Server不使用文本附件.因此,行将在逗号上划分,而不检查逗号是否在引号内.

你可能喜欢这样:

BULK INSERT newTable
FROM 'c:\file.txt'
WITH
(
    FIELDTERMINATOR ='",',
    ROWTERMINATOR = '"\n'
)
Run Code Online (Sandbox Code Playgroud)

这将给您以下结果:

col1  | col2                                        | col3
----------------------------------------------------------------
"blah | "blah, blah, blah  ect, ect                 | "column 3
"foo  | "foo, bar, baz  more stuff on another line  | "another column 3
Run Code Online (Sandbox Code Playgroud)

您所要做的就是去除每个单元格开头的引号.

例如:

UPDATE newTable 
SET col1 = RIGHT(col1,LEN(col1)-1), 
    col2 = RIGHT(col2,LEN(col2)-1), 
    col3 = RIGHT(col3,LEN(col3)-1)
Run Code Online (Sandbox Code Playgroud)

我认为您也可以使用带有格式文件的bcp实用程序来执行此操作