Estoy tratando de insertar una gran cantidad de datos en el servidor SQL. Mi tabla de destino tiene un índice único llamado "Hash".SqlBulkCopy Error al manejar/continuar con el error
Me gustaría reemplazar mi implementación SqlDataAdapter con SqlBulkCopy. En SqlDataAapter hay una propiedad llamada "ContinueUpdateOnError", cuando se establece en true adapter.Update (table) insertará todas las filas posibles y etiquetará las filas de error con la propiedad RowError.
La pregunta es ¿cómo puedo usar SqlBulkCopy para insertar datos tan rápido como sea posible sin perder de vista las filas que se insertaron y las filas que no (debido al índice único)?
Aquí es la información adicional:
El proceso es iterativo, a menudo establecer en un horario a repetir.
Las tablas de origen y de destino pueden ser enormes, a veces millones de filas.
Aunque es posible verificar primero los valores hash, se requieren dos transacciones por fila (primero para seleccionar el hash de la tabla de destino, luego realizar la inserción). Creo que en el caso de adapter.update (table), es más rápido verificar el RowError que verificar los hits por fila.
¿Por qué no eliminar las filas que ya existen del conjunto de datos que se van a insertar, antes de intentar insertar? – ChrisW
ChrisW, aprecia tu sugerencia. Si está sugiriendo que ejecute esta consulta "delete from table where hash in (value1, value2, ..). No puedo usar este enfoque porque tratará cada fila como si no existiera en la tabla de destino, sin embargo, a otras partes de mi sistema solo les gusta procesar los nuevos registros (los que no tienen la colisión hash). – Paladin
@Paladin, consulte la respuesta expandida –