批量插入SQL命令无法插入第一行

时间:2016-04-20 12:33:46

标签: sql sql-server bulkinsert ansi bulk-load

我正在为SQL Server使用批量插入命令,但由于某种原因未插入第一行。为什么我不能从第一行插入数据?批量插入是否期望标头为默认值,我如何绕过这个?如果我添加一个虚拟行并将WITH设置为FIRSTROW = 2,那么第一行插入时没有问题,但我不认为这是一个很好的解决方案。

错误代码:

  

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

命令:

BULK INSERT TableData
FROM 'C:\Users\Oscar\file.csv'
WITH (FIELDTERMINATOR = ';',
      ROWTERMINATOR = '\n',
      KEEPNULLS,
      KEEPIDENTITY)

示例数据:

1;Text 1;1;0;;
2;Text 2;1;0;;
3;Text 3;1;0;;
4;Text 4;1;0;;
5;Text 5;1;0;;

2 个答案:

答案 0 :(得分:2)

脚本可能是utf-8而你正试图从cmd加载cp-1252或者什么东西,UTF-Bom一开始就把翻译器吓坏了。 用hexeditor查看,你会看到它。

另存为ANSI,然后重试。

答案 1 :(得分:0)

我遇到了换行/回车换行问题,这也可能是问题所在。对于换行,我必须使用0x0a的行终止符:

BULK INSERT TableData
FROM 'C:\Users\Oscar\file.csv'
WITH (
FIELDTERMINATOR = ';',
ROWTERMINATOR = '0x0a',
KEEPNULLS,
KEEPIDENTITY)