2012-01-12 28 views
0

究竟做“批量加载数据转换错误(溢出)为第1行,第5列(块标识)平均的SQL Server批量加载错误消息4867

我想从一个CSV导入下面一行:

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

此列的格式flie线

5 SQLINT 0 4为 “\ r \ n” 个9 BLOCKID “”

如果更改为BLOCKID从2620401到0的值,我不遇到这个问题。数据未使用bcp导出。

TIA。

+0

是否有在桌子上,IE参照完整性的任何约束上? – 2012-01-12 17:50:46

+0

只是典型的非空和主键约束。 – 2012-01-12 17:59:45

回答

1

的4你的字段长度不足以用于一个整数。尝试使用12,这是默认值。

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

我怀疑是这样,然后去http://msdn.microsoft.com/en-us/library/ms187745.aspx,并确认我应该使用4的长度。另外格式文件是使用现有表上的bcp创建的,如果我使用这些值直接针对表运行插入,它需要它。 – 2012-01-12 18:00:12

+0

S,这很有帮助,但我也必须更改数据类型字段。我决定详细解释这一点,以防其他人遇到同样的问题。 MSDN没有正确记录这一点。 – 2012-01-12 19:01:33

0

这需要在MSDN上也规定了:

  1. 格式文件描述了被导入到数据库中的数据。
  2. 使用BCP创建的格式文件通常需要进行修改,以得到数据的精确表示,如果使用BCP没有导出该数据。 Bcp默认不会总是正确的。

在这种情况下,BCP创建以下行

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

的格式文件中的我整场。

如果此数据文件是使用BCP出口,那么这个领域将是一个SQLINT,因为这是在数据库中定义。

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

所以需要这种修正的:

5 SQLCHAR 0 12 “\ r \ n” 9块标识 “”