批量加载数据转换错误(指定代码页的类型不匹配或无效字符)

时间:2015-10-21 12:46:53

标签: sql sql-server csv bulkinsert

我在使用批量插入命令将.csv带入数据库时​​出现问题。以下是CSV I created

的示例

这是我写的查询:

BULK INSERT TBL_Staging FROM 'C:\Users\testdata.csv' With (FieldTerminator = ',', RowTerminator= '\n', KEEPNULLS);

这是我收到以下错误消息:

  

批量加载数据转换错误(类型不匹配或无效字符   对于第1行,第1列(Id)的指定代码页。 Msg 4864,等级   16,状态1,第1行

     

批量加载数据转换错误(类型不匹配或   对于第2行第2列,指定代码页的无效字符   (InvoiceHeaderId)。 Msg 4864,Level 16,State 1,Line 1

2 个答案:

答案 0 :(得分:8)

CSV数据的第一行包含列标题,错误消息是因为SQL Server正在尝试将标题行作为数据插入。删除列标题行或指定FIRSTROW = 2

BULK INSERT TBL_Staging FROM 'C:\Users\testdata.csv' With (FIRSTROW=2, FieldTerminator = ',', RowTerminator= '\n', KEEPNULLS);

为了其他可能在不看到提问者数据的情况下阅读本文的人的利益 - FIRSTROW = 2参数解决方法仅在您的标题行确实具有与您的数据相同数量的列和分隔符时才有效 - 在这种情况确实如此 - 否则会出错。

编辑:我注意到您的数据也有一些值使用双引号作为包含逗号的值的文本限定符,因此即使删除/跳过后您也可能会看到错误标题行。 SQL Server BULK INSERT因不支持CSV文本限定符而臭名昭着,多年来导致了几种不同的解决方法,包括但不限于:

  • 使用逗号以外的字段分隔符,不会在数据中出现,例如|
  • 指定'格式文件'对于批量插入

有关详情,请参阅这些现有帖子:

Bulk Insert Correctly Quoted CSV File in SQL Server

SQL Bulk import from CSV

答案 1 :(得分:0)

您是否尝试从文件中删除标题? 我看到它的方式,它将标题行视为数据行并返回错误,因为它的格式不正确。 如果标题是问题,那么预处理您的文件以将其删除,因为:

" BULK INSERT语句"

不支持跳过标题

来源https://msdn.microsoft.com/en-us/library/ms188365.aspx