使用 SqlBulkCopy 并获得此异常:
从 bcp 客户端接收到 colid 30 的无效列长度。
几个小时以来,我一直在用头撞这个。我知道哪一行有问题,但我不知道“colid 30”是哪一列。数据表中有 178 列。所有值似乎都是正确的,我没有看到任何比我的数据库中的任何列数据类型更长的值。
该数据库包含房产列表,目前有超过 300 万条记录,所有这些都很好。
有没有办法查明什么是colid 30?或者有没有办法查看 bcp 提交给数据库的实际 SQL?
使用 SqlBulkCopy 并获得此异常:
从 bcp 客户端接收到 colid 30 的无效列长度。
几个小时以来,我一直在用头撞这个。我知道哪一行有问题,但我不知道“colid 30”是哪一列。数据表中有 178 列。所有值似乎都是正确的,我没有看到任何比我的数据库中的任何列数据类型更长的值。
该数据库包含房产列表,目前有超过 300 万条记录,所有这些都很好。
有没有办法查明什么是colid 30?或者有没有办法查看 bcp 提交给数据库的实际 SQL?
我希望这也有助于解决其他人的问题。
错误是因为数据表中的字符串/varchar 字段之一有分号“;” 在它的价值。显然,您需要在插入之前手动转义这些!
我对所有行/列进行了循环并做了:
string.Replace(";", "CHAR(59)");
之后,一切顺利插入。
在我的情况下,相同的问题消息出现在 colid 53 上。实际上,问题出现在第 54 列上。我想,您还应该检查下一列与目标表的大小比较。我希望,它可以帮助你。
检查您正在执行批量插入的表中列的大小。varchar 或其他字符串列可能需要扩展。
例如,将尺寸从 30 增加到 50 =>
ALTER TABLE [dbo].[TableName]
ALTER COLUMN [ColumnName] Varchar(50)