代码之家  ›  专栏  ›  技术社区  ›  Constantin

在SQL Server中大容量插入一个在字段中带有换行符的csv

  •  1
  • Constantin  · 技术社区  · 15 年前

    我有一个这样的csv:

    "blah","blah, blah, blah
    ect, ect","column 3"
    "foo","foo, bar, baz
    more stuff on another line", "another column 3"
    

    是否可以将其直接导入SQL Server?

    1 回复  |  直到 15 年前
        1
  •  5
  •   Lukasz Lysik    15 年前

    文件中的每一行都以新行(\n)结尾,但要以引号和新行结尾的实际行除外。在大容量插入命令中将rowterminator设置为:

    ROWTERMINATOR = '"\n'
    

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

    您可以这样做:

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

    这将为您提供以下结果:

    col1  | col2                                        | col3
    ----------------------------------------------------------------
    "blah | "blah, blah, blah  ect, ect                 | "column 3
    "foo  | "foo, bar, baz  more stuff on another line  | "another column 3
    

    你所要做的就是去掉每个单元格开头的引号。

    例如:

    UPDATE newTable 
    SET col1 = RIGHT(col1,LEN(col1)-1), 
        col2 = RIGHT(col2,LEN(col2)-1), 
        col3 = RIGHT(col3,LEN(col3)-1)
    

    我想你也可以用 bcp utility 具有 format file