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