Excepción de SqlBulkCopy, encuentra el colid

sql sqlbulkcopy

Pregunta

Usando SqlBulkCopy y obteniendo esta excepción:

Se recibió una longitud de columna no válida del cliente bcp para colid 30.

Me he estado golpeando la cabeza contra esta por horas. Sé qué fila tiene el problema, pero no sé qué columna es "colid 30". Hay 178 columnas en la tabla de datos. Todos los valores parecen ser correctos y no veo ninguno que sea más largo que cualquier tipo de datos de columna en mi base de datos.

Esta base de datos contiene listados de propiedades y actualmente tiene más de 3 millones de registros, todos los cuales están bien.

¿Hay una manera de señalar qué es el colid 30? ¿O hay una manera de ver el SQL real que el bcp está enviando a la base de datos?

Respuesta aceptada

Espero que esto ayude a resolver los problemas de alguien más también.

El error se debió a que uno de los campos string / varchar en la tabla de datos tenía un punto y coma ";" en su valor. ¡Aparentemente necesitas escapar manualmente de estos antes de hacer el inserto!

Hice un bucle a través de todas las filas / columnas e hice:

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

Después de eso, todo se inserta suavemente.


Respuesta popular

Verifique el tamaño de las columnas en la tabla que está haciendo la inserción masiva. la varchar u otras columnas de cadena pueden necesitar ser extendidas.

por ejemplo, aumentar el tamaño de 30 a 50 =>

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


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué