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

sle*_*n37 0 sql sql-server csv bulkinsert

我有一个问题,使用批量插入命令将.csv带入数据库.以下是我创建CSV示例

这是我写的查询:

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

这给我带来以下错误消息:

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

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

Sev*_*rts 8

您的CSV数据的第一行包含列标题,并且错误信息是因为SQL Server试图插入您的标题行的数据.删除列标题行或指定FIRSTROW = 2

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

对于其他的谁可能读这没有看到提问者的数据的好处 - 如果你的标题行确实具有相同的列数和分隔符为您的数据FIRSTROW = 2参数的解决方法仅适用 - 在这种情况下,它没有 - 但除此之外,会错的.

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

  • 使用逗号以外的字段分隔符,即数据中不存在的字段分隔符,例如|
  • 为批量插入指定"格式文件"

有关更多信息,请参阅以

批量插入SQL Server中正确引用的CSV文件

从CSV导入SQL批量导入