SQL Server批量加载错误消息4867

时间:2012-01-12 17:41:33

标签: sql bulkinsert

第1行第5列(BlockId)的批量加载数据转换错误(溢出)究竟是什么意思?

我正在尝试从csv导入以下行:

  

201-125,JAN12-201-MON-周一 - 01,20519311-JAN12-201-MON-周一-01,   里士满,2620401

此列的格式化行

  

5 SQLINT 0 4“\ r \ n”9 BlockId“”

如果我将BlockId的值从2620401更改为0,我不会遇到此问题。未使用bcp导出数据。

TIA。

2 个答案:

答案 0 :(得分:1)

您的字段长度4对于整数是不够的。尝试使用12,这是默认设置。

5 SQLINT 0 12 "\r\n" 9 BlockId ""

答案 1 :(得分:0)

这需要在MSDN上详细说明:

  1. 格式文件描述了导入数据库的数据。
  2. 如果未使用bcp导出此数据,则需要修改使用bcp创建的格式文件以便准确表示数据。 Bcp默认值并不总是正确的。
  3. 在这种情况下,bcp创建了以下行

    5 SQLINT 0 4 "\r\n" 9 BlockId ""  
    

    表示格式文件中的整数字段。

    如果使用bcp导出此数据文件,则此字段将为SQLINT,因为这是数据库中定义的内容。

    但是,此数据不是使用bcp创建的。它只是一些手动创建的csv文件。因此,SQLINT的主机文件数据类型不正确。对于此类数据文件,请使用SQLCHAR的主机文件数据类型。然后,主机文件数据长度必须与数据文件中表示此字段的最小字符长度相对应。如果此字段进入数据库[int]类型的列,则保存为使用值12作为主机类型数据长度。

    所以需要进行修正:

      

    5 SQLCHAR 0 12“\ r \ n”9 BlockId“”