SqlBulkCopy异常,找到colid

问题描述 投票:0回答:4

使用 SqlBulkCopy 并获取此异常:

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

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

这个数据库保存了房产列表,目前有超过 300 万条记录,所有记录都很好。

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

sql sqlbulkcopy
4个回答
8
投票

我希望这也能帮助解决其他人的问题。

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

我循环遍历了所有行/列并执行了:

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

之后一切顺利插入。


0
投票

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

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

ALTER TABLE [dbo].[TableName]
ALTER COLUMN [ColumnName] Varchar(50)

0
投票

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


0
投票

计算列数时,从零 (0) 开始。因此第 54 列实际上是 53。

© www.soinside.com 2019 - 2024. All rights reserved.