Error de SqlBulkCopy con problema de conversión de cadena

.net sql sqlbulkcopy

Pregunta

Tengo una vista que genera una cantidad de columnas que quiero cargar en masa en otra tabla que tenga columnas con nombres idénticos.

Este procedimiento funcionó bien cuando realizaba un bucle en el SqlDataReader y hacía una inserción con SqlParameters usando un SqlCommand cada vez. Obviamente, para muchos 100000s de filas, esto fue demasiado lento.

Cambié a usar SqlBulkCopy, ya que parecía que esto funcionaría ya que los nombres de columna de las vistas y los nombres y tipos de columna de las tablas db de destino coinciden (¡ya que el procedimiento anterior funcionó!).

Sin embargo, en el primer registro falla con una InvalidOperationException que dice "El valor dado de tipo String no se puede convertir al tipo smalldatetime de la columna de destino especificada". Solo hay una columna de fecha en esta primera fila y su valor es NULL.

La vista solo está devolviendo un subconjunto de columnas, pero las que no son todas son anulables.

Cualquier ayuda sería apreciada.

Respuesta aceptada

sqlbulkcopy no se asigna automáticamente entre columnas con el mismo nombre. Se supone que su selección devolverá las columnas en el mismo orden en que las ve en la tabla de destino.

Entonces, si hay 7 columnas en la tabla de destino y la vista devuelve 5, intentará colocar esas 5 en las primeras 5 columnas de la tabla de destino.

La clase SqlBulkCopy puede tomar una colección de asignaciones de columnas. Eso debería hacer el truco


Respuesta popular

intente configurar SET DATEFORMAT en el formato correcto (ymd, dmy, mdy, ...) para su conexión y vuelva a intentarlo. este error suele ocurrir si tiene fechas en un formato localizado y no en un formato independiente de la configuración regional.

como para hacerlo todo en una inserción, esto no se recomienda porque se considera una transacción de larga ejecución y no una operación de inserción masiva.



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é