sql server批量插入带有逗号数据的csv

sum*_*mit 11 sql sql-server csv bulkinsert

下面是csv的示例行

012,12/11/2013,"<555523051548>KRISHNA  KUMAR  ASHOKU,AR",<10-12-2013>,555523051548,12/11/2013,"13,012.55",
Run Code Online (Sandbox Code Playgroud)

你可以看到KRISHNA KUMAR ASHOKU,AR作为单场,但它因为逗号而将KRISHNA KUMAR ASHOKU和AR视为两个不同的领域,尽管它们附有"但仍然没有运气

我试过了

BULK
INSERT tbl
FROM 'd:\1.csv'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n',
FIRSTROW=2
)
GO
Run Code Online (Sandbox Code Playgroud)

它有什么解决方案吗?

Hel*_*ker 14

他们添加了对此 SQL Server 2017 (14.x) CTP 1.1 的支持。您需要对 BULK INSERT 命令使用 FORMAT = 'CSV' 输入文件选项。

需要明确的是,这是给我带来问题的 csv 的样子,第一行很容易解析,第二行包含曲线球,因为引用的字段内有一个逗号:

jenkins-2019-09-25_cve-2019-10401,CVE-2019-10401,4,Jenkins Advisory 2019-09-25: CVE-2019-10401: 
jenkins-2019-09-25_cve-2019-10403_cve-2019-10404,"CVE-2019-10404,CVE-2019-10403",4,Jenkins Advisory 2019-09-25: CVE-2019-10403: CVE-2019-10404: 
Run Code Online (Sandbox Code Playgroud)

损坏的代码

BULK INSERT temp
    FROM 'c:\test.csv'
    WITH
    (
        FIELDTERMINATOR = ',',
        ROWTERMINATOR = '0x0a',
        FIRSTROW= 2
    );
Run Code Online (Sandbox Code Playgroud)

工作代码

BULK INSERT temp
    FROM 'c:\test.csv'
    WITH
    (
        FIELDTERMINATOR = ',',
        ROWTERMINATOR = '0x0a',
        FORMAT = 'CSV',
        FIRSTROW= 2
    );
Run Code Online (Sandbox Code Playgroud)


dav*_*pfx 11

答案是:你做不到.请参阅http://technet.microsoft.com/en-us/library/ms188365.aspx.

"从CSV文件导入数据

SQL Server批量导入操作不支持逗号分隔值(CSV)文件.但是,在某些情况下,CSV文件可用作将数据批量导入SQL Server的数据文件.有关从CSV数据文件导入数据的要求的信息,请参阅为批量导出或导入准备数据(SQL Server)."

一般的解决方案是您必须将CSV文件转换为可以成功导入的文件.您可以通过多种方式执行此操作,例如使用不同的分隔符(例如TAB)创建文件,或者使用了解CSV文件(例如Excel或许多脚本语言)的工具导入表并使用唯一的方法导出表格分隔符(如TAB),然后您可以从BULK INSERT.

  • 在我看来,给出的答案是正确的.无法修改SQL命令以获得所需的结果.CSV文件必须在上传之前进行预处理.用于修改文件的特定工具或技术的选择超出了问题的范围.我稍微编辑了答案以使其更清楚. (5认同)

zee*_*zee 5

不幸的是,SQL Server导入方法(BCP && BULK INSERT)不理解引用""

来源:http://msdn.microsoft.com/en-us/library/ms191485%28v=sql.100%29.aspx