2009-11-09 31 views
9

Tengo una tabla de datos con los registros.Estoy insertando registros en la tabla Sql usando SqlBulkCopy.Funciona bien.La próxima vez cuando obtiene la tabla de datos con los mismos registros con pocos valores modificados SqlBulkCopy está insertando otra conjunto de registros sin actualizar los detalles anteriores. ¿Cómo puedo actualizar la tabla Sql usando SqlBulkCopy? Por favor ayuda.Uso de SQLBulkCopy para insertar/actualizar la base de datos

Gracias, Vix

Respuesta

15

SqlBulkCopy solamente se utiliza para insertar registros, no actualizar como se ha explicado here. Debería usar una técnica diferente para realizar actualizaciones masivas.

p. Ej. podría SqlBulkCopy en una tabla de etapas, luego ejecutar algunos SQL para actualizar desde allí a la tabla principal.

+0

+1 para la tabla de etapas, así es exactamente como debe hacer las actualizaciones con bulk-insert, y para grandes cantidades de actualizaciones en las mismas tablas, vale la pena el esfuerzo para hacerlo. –

3

Truncar la tabla y realizar Bulkcopy.

+0

para vix: truncar la carga masiva es el proceso más eficiente si solo desea que la tabla resultante contenga solo los registros de carga masiva. - upvoted – Chad

+0

Bien para algunas situaciones simples, pero esto sería un verdadero dolor si cualquier nivel de complejidad en los datos que está actualizando. Mantener su integridad de datos podría ser muy difícil dependiendo de los detalles de la aplicación/base de datos. p.ej. Las relaciones FK deben ser retenidas. – MemeDeveloper

2

Evitar Truncar tabla y Crear una nueva tabla temporal, que BTW consume más espacio y memoria.

Creé un disparador con INSTEAD OF INSERT y uso dentro de la instrucción MERGE.

Pero no olvide agregar el parámetro SqlBulkCopyOptions.FireTriggers en SqlBulkCopy.

Este es mi dos centavos.

-1

Como mencionó AdaTheDev, SqlBulkCopy solo puede insertar, pero hay una biblioteca alternativa que permite realizar operaciones de restauración.

Negación: Soy el propietario del proyecto Bulk Operations

La biblioteca de operaciones a granel tiene un método "BulkMerge" cuya inserción o filas actualización basada en la clave especificada.

Cuestiones relacionadas