尝试使用SqlBulkCopy插入数据,我收到此错误:
Received an invalid column length from the bcp client for colid 6
他们建议两件事之一:
但我很高兴发生“隐式截断”...(即数据库插入或SqlBulkCopy本身会将用户提供的值降低到适当的大小)
问题:
SET ANSI_WARNINGS OFF
”时获得“隐式截断”行为,以便“When OFF, data is truncated to the size of the column and the statement succeeds”答案 0 :(得分:3)
我意识到这是一篇很老的帖子,但刚刚遇到这个问题并且没有找到太多帮助,我想分享我找到的解决方案。您可以在创建 SqlBulkCopy 对象时对传入的连接关闭 ANSI_WARNINGS,SQL Server 将自动为您截断数据,而不是抛出异常。
using (var bulkConn = new SqlConnection(destConnString))
{
bulkConn.Open();
using (var cmd = bulkConn.CreateCommand())
{
// kill the data truncation errors
cmd.CommandText = "SET ANSI_WARNINGS OFF";
cmd.ExecuteNonQuery();
}
using (var writer = new SqlBulkCopy(bulkConn, BulkCopyOptions, null)
{
BatchSize = 10000,
DestinationTableName = $"[{schema}].[{table}]",
EnableStreaming = true,
BulkCopyTimeout = 0
})
{
writer.WriteToServer(data);
}
}