“csv文件的大量加载数据转换错误

时间:2015-07-22 18:16:13

标签: sql-server

我正在尝试导入.csv文件,但我收到了“BULK LOAD DATA CONVERSION ERROR”的最后一栏。文件看起来像:

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

我试过下面的rowterminator:

ROW TERMINATOR = "\"\r\n"

什么都没有用。有关导致此记录出现此错误的原因的任何想法?感谢

1 个答案:

答案 0 :(得分: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