【问题标题】:TSQL Bulk InsertTSQL 批量插入
【发布时间】:2011-04-07 19:19:24
【问题描述】:

我有这样的 csv 文件,字段分隔符是,。我的 csv 文件很大,我需要将它导入到 SQL Server 表中。这个过程必须是自动化的,而且不是一次性的工作。

所以我使用批量插入来插入这样的 csv 文件。但是今天我收到了一个 csvfile 有这样的行

1,12312312,HOME   ,"House, Gregory",P,NULL,NULL,NULL,NULL

问题是批量插入创建了这一行,特别是这个字段“House, Gregory” 作为两个字段,一个是“House”,第二个是“Gregory”。

有没有办法让批量插入理解双引号会覆盖逗号的行为? 当我用 Excel 打开这个 csv 时,它通常会看到这个字段为 'House, Gregory'

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    你需要预处理你的文件,看看这个答案:

    SQL Server Bulk insert of CSV file with inconsistent quotes

    【讨论】:

    • 那么大小与它有什么关系呢?如果您不能更改文件,预处理就是答案。或者让您的提供商正确地为您提供所有列都用引号括起来的数据,或者使用逗号以外的东西作为分隔符(我发回他们尝试使用的任何文件,发送逗号分隔的文件是完全不可接受的文件。)
    【解决方案2】:

    如果表中的每一行都有双引号,您可以使用 format files 指定 ," 和 ", 作为该列的列分隔符

    如果没有,请对其进行更改,否则您将不得不在某处编写一些巧妙的预处理例程。

    文件格式必须一致才能使任何 SQL Server 工具正常工作

    【讨论】:

      【解决方案3】:

      由于您指的是 Sql Server,我假设您也可以使用 Access(Microsoft 友好的环境)。如果您确实有 Access,我建议您使用其导入向导。它比 Sql Server(甚至是 2014 版)的导入向导智能得多,也比 Bulk Insert sql 命令智能得多。

      它有一个小部件,您可以在其中将文本分隔符定义为“,它也不会影响字符串长度,因为它使用 Access 数据类型 Text。 如果您对 Access 中的结果感到满意,您可以稍后将它们无缝导入到 Sql Server。

      将数据从 Access 移动到 Sql 的最佳方法是使用 Sql Server 迁移助手,可用here

      【讨论】:

        猜你喜欢
        • 2014-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-15
        • 1970-01-01
        • 2012-02-16
        • 2023-04-09
        相关资源
        最近更新 更多