SQL Bulkcopy para la relación cliente / padre

.net sqlbulkcopy sql-server

Pregunta

tenemos 2 DataTables en una aplicación .NET que tiene una relación Cliente / Padre con millones de filas. Estos datos deben insertarse en una base de datos de SQL Server a través de SQL BulkCopy. Es posible que varias instancias de esta aplicación .NET se ejecuten en paralelo insertando datos diferentes en las mismas tablas.

Para la generación automática de las claves primarias tenemos una columna de identidad en la tabla principal.

El problema es que no sabemos cómo insertar las claves externas correspondientes en la tabla secundaria.

¿Alguien sabe cómo resolver este problema de relación 1: N utilizando la copia masiva? No podemos crear los ID en .NET porque se pueden ejecutar varias instancias.

Gracias daniel

Respuesta aceptada

Esta es solo una de las muchas razones por las que prefiero usar claves naturales sobre IDENTIDAD para todas mis claves principales.

¿Cómo sabes qué hijos van a qué padre en la fuente de datos? Si están vinculados por una columna allí, entonces no debería ser demasiado difícil. Inserte las filas principales, inserte las filas secundarias en una tabla de preparación, luego inserte las filas secundarias mientras se une a las principales en esa columna para obtener el ID.

Si la relación es simplemente por las posiciones relativas en un archivo o algo similar a eso, entonces se vuelve más difícil. Puede incluir el número de línea del archivo y luego usar los mismos pasos anteriores, unirse a esos (child.line_num> parent.line_num y ningún otro parent.line_num se encuentra entre esos dos números) o puede importar los padres uno por uno en un bucle, capture la ID, luego inserte todos sus hijos usando esa ID. Puede configurar esto en SSIS sin demasiados problemas, pero puede ser lento.

Con más detalles sobre su problema (fuente de datos, etc.) es posible que pueda proporcionar más detalles.


Respuesta popular

No estoy seguro de dónde están tus datos, pero así es como me acercaría a esto.

  1. Utilice archivos planos intermedios, uno o más.
  2. Aplanar sus datos y asignar una clave principal.
  3. Habilitar identity insert para la tabla principal (significa omitir auto-incremento)
  4. Use SSIS para cargar su base de datos, en lugar de solo una copia 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é