【问题标题】:How to insert csv file without double quotes如何插入不带双引号的csv文件
【发布时间】:2015-08-11 08:58:54
【问题描述】:

我正在使用 SQL 2014。

这是我当前的代码:

CREATE TABLE tmp_OKFF
    (
        OKCCY VARCHAR(5),
        OKBRNM VARCHAR(6),
        OKONPX VARCHAR(17),
        OKONPM VARCHAR(17),
        OKFRX VARCHAR(19),
        OKFPX VARCHAR(19),
        OKMRX VARCHAR(17),
        OKMPX VARCHAR(17),
        OKSEQ VARCHAR(3)
    )

BULK INSERT tmp_OKFF
    FROM 'C:\sample.CSV'
    WITH (FORMATFILE='C:\sample.fmt')

这是 csv 中的示例数据:

"ABC","0001",-990039739       ,0                ,0                  ,0                  ,0                ,0                ,0
"ABC","    ",-3422054702      ,0                ,481385             ,0                  ,0                ,0                ,0
"XXX","0001",0                ,0                ,0                  ,0                  ,0                ,0                ,0
"ASD","    ",0                ,0                ,0                  ,0                  ,0                ,0                ,0
"JED","0001",21644944         ,0                ,0                  ,0                  ,0                ,0                ,0
"FAQ","    ",74815363         ,0                ,0                  ,11120              ,0                ,0                ,0
"PHP","0002",905175206        ,0                ,0                  ,0                  ,0                ,0                ,0

这是格式的确切脚本:

12.0
10
1 SQLCHAR 0 0 "\"" 0 "" ""
2 SQLCHAR 0 5 "\",\"" 1 OKCCY SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 6 "\",\"" 2 OKBRNM SQL_Latin1_General_CP1_CI_AS
4 SQLMONEY 0 19 "\",\"" 3 OKONPX SQL_Latin1_General_CP1_CI_AS
5 SQLMONEY 0 19 "\",\"" 4 OKONPM SQL_Latin1_General_CP1_CI_AS
6 SQLMONEY 0 21 "\",\"" 5 OKFRX SQL_Latin1_General_CP1_CI_AS
7 SQLMONEY 0 21 "\",\"" 6 OKFPX SQL_Latin1_General_CP1_CI_AS
8 SQLMONEY 0 19 "\",\"" 7 OKMRX SQL_Latin1_General_CP1_CI_AS
9 SQLMONEY 0 19 "\",\"" 8 OKMPX SQL_Latin1_General_CP1_CI_AS
10 SQLMONEY 0 5 "\"\r\n" 9 OKSEQ SQL_Latin1_General_CP1_CI_AS

执行这些脚本后出现错误:

Msg 4863, Level 16, State 1, Line 20
Bulk load data conversion error (truncation) for row 1, column 3 (OKBRNM).

【问题讨论】:

  • 是哪一个? SQL Server 还是 MySQL?好像是 SQL Server。
  • 很抱歉让您感到困惑,但它是 SQL Server 2014。谢谢!
  • 没问题。请注意,我现在只有 2012 年。这就是我在回答中将 12.0 更改为 11.0 的原因。但这并不重要。在你这边切换回 12。

标签: sql csv bulkinsert sql-server-2014


【解决方案1】:

我根据您的表格和示例更改了您的格式文件:

11.0                                                       => I am using SS2012
10
1 SQLCHAR 0 1 "\"" 0 ""                                    => change from 0 to 1
2 SQLCHAR 0 3 "\",\"" 1 OKCCY SQL_Latin1_General_CP1_CI_AS => 5 to 3 (length in your sample)
3 SQLCHAR 0 4 "\"," 2 OKBRNM SQL_Latin1_General_CP1_CI_AS  => remove last after comma and change 6 to 4
4 SQLCHAR 0 17 "," 3 OKONPX SQL_Latin1_General_CP1_CI_AS   => change 19 to 17 and remove quote
5 SQLCHAR 0 17 "," 4 OKONPM SQL_Latin1_General_CP1_CI_AS   => change to 17 and remove quotes
6 SQLCHAR 0 19 "," 5 OKFRX SQL_Latin1_General_CP1_CI_AS    => change to 19 and remove quotes
7 SQLCHAR 0 19 "," 6 OKFPX SQL_Latin1_General_CP1_CI_AS    => change to 19 and remove quotes
8 SQLCHAR 0 17 "," 7 OKMRX SQL_Latin1_General_CP1_CI_AS    => change to 17 and remove quotes
9 SQLCHAR 0 17 "," 8 OKMPX SQL_Latin1_General_CP1_CI_AS    => change to 17 and remove quotes
10 SQLCHAR 0 3 "\r" 9 OKSEQ SQL_Latin1_General_CP1_CI_AS   => change to 17 and remove quotes
=> line break

输出select * from tmp_okff:

OKCCY OKBRNM OKONPX             OKONPM              OKFRX               OKFPX               OKMRX           OKMPX               OKSEQ
ABC 0001    -990039739          0                   0                   0                   0                   0                   0
ABC         -3422054702         0                   481385              0                   0                   0                   0
XXX 0001    0                   0                   0                   0                   0                   0                   0
ASD         0                   0                   0                   0                   0                   0                   0
JED 0001    21644944            0                   0                   0                   0                   0                   0
FAQ         74815363            0                   0                   11120               0                   0                   0
PHP 0002    905175206           0                   0                   0                   0                   0                   0

【讨论】:

  • 您好。我得到一个错误。即使我调整了列长。无论如何,错误是......“无法批量加载。格式文件中的列号无效......”
  • 您是否保留了 10(第 2 行)并且下面还有第 1 到 10 行?我想你删除了我所有的 cmets。不要忘记第 10 行或第 9 行之后的换行符将是最后一行。
  • 我不是 SQL 2014 中的骗子。所以我所做的只是复制了您编辑的脚本并删除了 cmets。
  • 我总是忘记在最后添加一个换行符,当我第一次复制你的格式文件并第一次尝试时我又忘记了。我将其添加到我的答案中。
猜你喜欢
  • 2017-06-13
  • 2014-04-22
  • 1970-01-01
  • 2019-02-15
  • 1970-01-01
  • 2019-03-28
  • 2016-03-04
  • 1970-01-01
  • 2017-05-06
相关资源
最近更新 更多