【问题标题】:sql server Bulk insert csv with data having commasql server批量插入带有逗号数据的csv
【发布时间】:2014-02-09 03:45:54
【问题描述】:

下面是csv的示例行

012,12/11/2013,"<555523051548>KRISHNA  KUMAR  ASHOKU,AR",<10-12-2013>,555523051548,12/11/2013,"13,012.55",

您可以将 KRISHNA KUMAR ASHOKU,AR 视为单个字段,但由于逗号,它将 KRISHNA KUMAR ASHOKU 和 AR 视为两个不同的字段,尽管它们用“但仍然没有运气 p>

我试过了

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

有什么解决办法吗?

【问题讨论】:

  • 将其导入临时表并在那里修复。

标签: sql sql-server csv bulkinsert


【解决方案1】:

很遗憾,SQL Server 导入方法(BCP && BULK INSERT)不理解引用“”

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

【讨论】:

    【解决方案2】:

    答案是:你不能那样做。见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 文件必须在上传前进行预处理。用于修改文件的特定工具或技术的选择超出了问题的范围。我已经稍微编辑了答案以使其更清晰。
    【解决方案3】:

    我最近遇到了这个问题,不得不切换到制表符分隔格式。如果您这样做并使用 SQL Server Management Studio 进行导入(右键单击数据库,然后选择任务,然后选择导入)制表符分隔就可以了。带有制表符分隔的批量插入选项也应该可以工作。

    当我发现 Microsoft SQL Server 存在这个逗号分隔问题时,我必须承认自己非常惊讶。 CSV 文件格式是一种非常古老的格式,因此发现这是现代数据库的问题非常令人失望。

    【讨论】:

    • 您的意思是投票率最高的答案?没有一个答案被接受。
    【解决方案4】:

    嗯,批量插入非常快,但不是很灵活。您可以将数据加载到临时表中,然后将所有内容推送到生产表中吗?进入 SQL Server 后,您可以更好地控制如何将数据从一个表移动到另一个表。所以,基本上。

    1)    Load data into staging
    2)    Clean/Convert by copying to a second staging table defined using the desired datatypes. Good data copied over, bad data left behind
    3)    Copy data from the "clean" table to the "live" table
    

    【讨论】:

      【解决方案5】:

      MS 现在已经解决了这个问题,您可以在 with 子句中使用 FIELDQUOTE 来添加带引号的字符串支持:

      FIELDQUOTE = '"',
      

      如果您有 SQL Server 2017 或更高版本,则 with 子句中的任何地方都可以解决问题。

      【讨论】:

        【解决方案6】:

        他们添加了对此 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: 
        

        破解密码

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

        工作代码

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

        【讨论】:

          猜你喜欢
          • 2010-10-21
          • 1970-01-01
          • 1970-01-01
          • 2013-03-16
          • 1970-01-01
          • 1970-01-01
          • 2020-11-09
          • 1970-01-01
          相关资源
          最近更新 更多