繁体   English   中英

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

[英]Bulk load data conversion error (type mismatch or invalid character for the specified codepage)

我在使用批量插入命令将.csv导入数据库时​​遇到问题。 这是我创建CSV示例

这是我写的查询:

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

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

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

第2行第2列(InvoiceHeaderId)的批量加载数据转换错误(类型不匹配或指定代码页的字符无效)。 消息4864,第16级,州1,第1行

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文本限定符而臭名昭著,这些年来导致了几种不同的解决方法,包括但不限于:

  • 使用逗号以外的字段定界符,该定界符不会出现在数据中,例如| |。
  • 为批量插入指定“格式文件”

有关更多信息,请参见以下现有文章:

在SQL Server中批量插入正确报价的CSV文件

从CSV批量导入SQL

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

“ BULK INSERT语句不支持跳过标题”

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM