Inserciones a granel con DBCC CheckIdent

batch-processing dbcc sqlbulkcopy sql-server sql-server-2008

Pregunta

Nuestro equipo necesita insertar una cantidad cruel de datos en nuestra base de datos SQL Server 2008. Estamos buscando una buena solución. Ahora se nos ocurrió uno, pero tengo dudas, simplemente porque no se siente bien. Así que estoy preguntando aquí si esto parece una buena solución. ¡Un desafío adicional es que se trata de una base de datos replicada de igual a igual en 4 servidores! :)

Imagina que tenemos 1 millón de filas para insertar.

  1. Iniciar transaccion
  2. Aumentar el valor de identificación actual en una tabla con 1 millón
  3. Tenga listo un DataSet / DataTable con 1 millón de filas y los identificadores correctos
  4. BulkCopy los datos en la base de datos
  5. Compromiso de transacción

¿Es esta una buena solución? ¿Podríamos tener problemas de concurrencia, tener transacciones demasiado grandes, etc.?

Respuesta popular

solo obtendrás problemas (por lo que puedo ver, por lo que podría haber cosas que pase por alto) si la base de datos está en línea y los usuarios pueden insertar filas en esa tabla. Aumentar el valor de identidad para nuevas filas en el meta-nivel simplemente significa que la siguiente fila insertada por el sistema usará ese número, por lo que si lo golpea con 1 millón, significa que reservó esos números por adelantado.

Las columnas de identidad son "agradables" pero tienen el efecto secundario de que no son transferibles. Entonces, si tiene que migrar los datos a otra base de datos, tenga en cuenta que probablemente tenga que ajustar los datos insertados para que coincidan con la base de datos en la que los inserta (ya que ese es el alcance de los datos, lo que significa que los campos de identidad podrían colisionar con las filas que ya están en la tabla). ).

Si esto es un asunto de una sola vez, podría funcionar. Si planea hacer esto con regularidad, buscaría un sistema de migración de nivel más alto donde migre los datos a nuevos valores de identidad o use GUID con NEWSEQUENTIALID () para obtener índices comprobados adecuados y también identificadores únicos y transferibles. .



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é