SQL CLR SqlBulkCopy de DataTable

clr sql sqlbulkcopy sqlclr sql-server

Pregunta

Tenemos un DataTable en memoria en un procedimiento CLR. Después de un procesamiento significativo, el DataTable tiene una gran cantidad de datos que necesitamos cargar en una tabla en la base de datos. Desafortunadamente, dado que estamos utilizando una conexión de contexto, SqlBulkCopy no funcionará (se produce un error: la operación solicitada no está disponible en el esquema de conexión de contexto de las restricciones de contexto ).

Estamos pensando en construir una conexión regular adicional y usarla para realizar la copia de SQLBulk. Esto parece bastante tonto dada la sobrecarga de usar una conexión regular sobre una conexión de contexto . Hemos pensado en iterar sobre las filas en la tabla de datos e insertar un registro para cada una, pero es de gran tamaño y SQLBulkCopy parece ser la mejor opción.

No estamos casados ​​con el DataTable y solo estamos buscando el mejor método para insertar una gran cantidad de datos en una base de datos desde un procedimiento de CLR. Una nota final en el DataTable es representativa de una tabla de base de datos subyacente pero no está vinculada a la tabla a través de un DataSet o TableAdapter. Los medios para hacerlo en un procedimiento CLR no eran inmediatamente obvios. Hacerlo y usar el método AcceptChanges o Update sería una solución aceptable.

Respuesta aceptada

Yo estimo que SQLBulkCopy es 10-100 veces más rápido que hacer inserciones en función del tamaño de la tabla, por lo que la compensación vale la pena.

Viendo que está haciendo un 'procesamiento significativo' en su DataTable, que sin duda requiere tiempo y recursos, la pequeña sobrecarga adicional de usar una conexión completa en lugar de una conexión de contexto, o abrir una conexión completamente nueva es un pequeño precio a pagar .



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é