【问题标题】:"BULK LOAD DATA CONVERSION ERROR for csv file“csv 文件的批量加载数据转换错误
【发布时间】:2015-07-22 18:16:13
【问题描述】:

我正在尝试导入 .csv 文件,但最后一列出现“BULK LOAD DATA CONVERSION ERROR”。文件看起来像:

"123456","123","001","0.00"

我已经尝试过以下行终止符:

ROW TERMINATOR = "\"\r\n"

没有任何工作。关于是什么导致此记录出现此错误的任何想法?谢谢

【问题讨论】:

  • 那么您要将此"0.00" 填充到的字段类型是什么?
  • 我对所有字段都使用 varchar
  • 也许您可以尝试删除引号,只需给出 123456,123,001,0.00 并将终止符用作“\r\n”。在答案中添加了一个示例。

标签: sql-server


【解决方案1】:

根据下面给出的示例,删除 csv 中的引号并将终止符用作“\r\n”。

在进行批量插入时始终使用 xml 格式。它提供了几个优点,例如数据文件的验证等。

格式文件将数据文件的字段映射到表的列。使用 bcp 命令或 BULK INSERT 或 INSERT 或 Transact-SQL 命令时,可以使用非 XML 或 XML 格式文件批量导入数据

考虑到你给出的输入文件,假设你有一个如下表:

CREATE TABLE myTestFormatFiles (
  Col1 smallint,
  Col2 nvarchar(50),
  Col3 nvarchar(50),
  Col4 nvarchar(50)
);

您的示例数据文件如下:

10,Field2,Field3,Field4
15,Field2,Field3,Field4
46,Field2,Field3,Field4
58,Field2,Field3,Field4

示例格式的 XML 文件将是:

<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <RECORD>
    <FIELD ID="1" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="7"/>
    <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
    <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
    <FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  </RECORD>
  <ROW>
   <COLUMN SOURCE="1" NAME="Col1" xsi:type="SQLSMALLINT"/>
   <COLUMN SOURCE="2" NAME="Col2" xsi:type="SQLNVARCHAR"/>
   <COLUMN SOURCE="3" NAME="Col3" xsi:type="SQLNVARCHAR"/>
   <COLUMN SOURCE="4" NAME="Col4" xsi:type="SQLNVARCHAR"/>
  </ROW>
</BCPFORMAT>

如果您对格式文件不熟悉,请查看 XML Format Files (SQL Server).

举例说明here

【讨论】:

    猜你喜欢
    • 2015-09-28
    • 2011-11-23
    • 2012-10-26
    • 2013-02-16
    • 2013-11-10
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多