3

使用 SqlBulkCopy 并获得此异常:

从 bcp 客户端接收到 colid 30 的无效列长度。

几个小时以来,我一直在用头撞这个。我知道哪一行有问题,但我不知道“colid 30”是哪一列。数据表中有 178 列。所有值似乎都是正确的,我没有看到任何比我的数据库中的任何列数据类型更长的值。

该数据库包含房产列表,目前有超过 300 万条记录,所有这些都很好。

有没有办法查明什么是colid 30?或者有没有办法查看 bcp 提交给数据库的实际 SQL?

4

3 回答 3

8

我希望这也有助于解决其他人的问题。

错误是因为数据表中的字符串/varchar 字段之一有分号“;” 在它的价值。显然,您需要在插入之前手动转义这些!

我对所有行/列进行了循环并做了:

string.Replace(";", "CHAR(59)");

之后,一切顺利插入。

于 2013-08-10T02:54:59.617 回答
0

在我的情况下,相同的问题消息出现在 colid 53 上。实际上,问题出现在第 54 列上。我想,您还应该检查下一列与目标表的大小比较。我希望,它可以帮助你。

于 2020-08-25T06:57:47.677 回答
0

检查您正在执行批量插入的表中列的大小。varchar 或其他字符串列可能需要扩展。

例如,将尺寸从 30 增加到 50 =>

ALTER TABLE [dbo].[TableName]
ALTER COLUMN [ColumnName] Varchar(50)
于 2017-08-25T01:38:48.213 回答