Bulkcopy SQL per relazione cliente / genitore

.net sqlbulkcopy sql-server

Domanda

abbiamo 2 DataTable in un'applicazione .NET con una relazione Client / Parent con milioni di righe. Questi dati devono essere inseriti in un database SQL Server tramite SQL BulkCopy. È possibile che più istanze di questa applicazione .NET vengano eseguite in parallelo inserendo dati diversi nelle stesse tabelle.

Per la generazione automatica delle chiavi primarie Abbiamo una colonna Identity nella tabella genitore.

Il problema è che non sappiamo come inserire le chiavi esterne corrispondenti nella tabella figlio.

Qualcuno sa come risolvere questo problema di relazione 1: N usando bulkcopy? Non possiamo creare gli ID in .NET perché potrebbero essere eseguite più istanze.

Grazie Daniele

Risposta accettata

Questo è solo uno dei tanti motivi per cui preferisco usare le chiavi naturali su IDENTITY per tutte le mie chiavi primarie.

Come fai a sapere quali bambini vanno su quale genitore nell'origine dati? Se sono collegati da una colonna, non dovrebbe essere troppo difficile. Inserire le righe parent, inserire le righe secondarie in una tabella di staging, quindi inserire le righe secondarie mentre si uniscono ai genitori su quella colonna per ottenere l'ID.

Se la relazione è semplicemente dalle posizioni relative in un file o qualcosa di simile a quello allora diventa più difficile. Puoi includere la riga del file # e poi usare gli stessi passi sopra, unendoti a quelli (child.line_num> parent.line_num e nessun altro parent.line_num è tra questi due numeri) oppure puoi importare i genitori uno alla volta in un ciclo, catturare l'ID, quindi inserire tutti i suoi figli usando quell'ID. È possibile impostare questo in SSIS senza troppi problemi, ma può essere lento.

Con maggiori dettagli sul tuo problema (origine dati, ecc.) Potrei essere in grado di fornire più specifiche.


Risposta popolare

Non sono sicuro dove sono i tuoi dati, ma questo è il modo in cui mi avvicinerei a questo.

  1. Utilizzare file flat intermedi, uno o più.
  2. Appiattisci i tuoi dati e assegna una chiave primaria.
  3. Abilita identity insert per la tabella padre (significa saltare l'incremento automatico)
  4. Usa SSIS per caricare il tuo database, invece della sola copia di massa.


Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché