SQL Server批量加载错误消息4867

SQL Server批量加载错误消息4867,sql,bulkinsert,Sql,Bulkinsert,第1行第5列(BlockId)的“批量加载数据转换错误(溢出)”到底意味着什么 我正在尝试从csv导入以下行: 2011年1月12日-201日-周一-0120519311年1月12日-201日-周一-01, 里士满,2620401 此列的格式文件行为 5 SQLINT 0 4“\r\n“9块ID” 如果我将BlockId的值从2620401更改为0,则不会遇到此问题。未使用bcp导出数据 TIA.您的字段长度4不足以表示整数。请尝试使用默认值12 5 SQLINT 0 12 "\r\n" 9 B

第1行第5列(BlockId)的“批量加载数据转换错误(溢出)”到底意味着什么

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

2011年1月12日-201日-周一-0120519311年1月12日-201日-周一-01, 里士满,2620401

此列的格式文件行为

5 SQLINT 0 4“\r\n“9块ID”

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


TIA.

您的字段长度4不足以表示整数。请尝试使用默认值12

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

这需要在MSDN上详细说明:

  • 格式文件描述正在导入数据库的数据
  • 如果未使用bcp导出此数据,则通常需要修改使用bcp创建的格式文件,以提供数据的准确表示。bcp默认值并不总是正确的
  • 在本例中,bcp创建了以下行

    5 SQLINT 0 4 "\r\n" 9 BlockId ""  
    
    用于格式文件中的“我的整数”字段

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

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

    因此,这一修正是必要的:

    5 SQLCHAR 0 12“\r\n“9块ID”


    表上是否有任何限制,即引用完整性?只是典型的非空和主键约束。我怀疑是这样,然后转到并确认我应该使用长度为4。此外,格式文件是在现有表上使用bcp创建的,如果我使用这些值直接对表运行insert,则会使用.S,这是很有帮助的但我还必须更改数据类型字段。我决定详细解释这一点,以防其他人遇到同样的问题。MSDN没有正确记录这一点。