Inserto di massa con convalida dei dati

bulkinsert sqlbulkcopy sql-server

Domanda

Abbiamo l'obbligo di inserire un numero elevato di record (da 2 a 3 milioni) in una tabella. Tuttavia, dovremmo essere in grado di convalidare e segregare i record non validi - chiave primaria, chiave esterna e violazioni non nulle - in una tabella errori separata per riferimento futuro. Secondo il mio studio, l'inserimento di massa nel server SQL funziona bene per l'inserimento, ma non sono in grado di capire il modo migliore per filtrare i record di dati non validi. Avere una tabella di staging tra aiuto? Anche se potremmo verificare le violazioni utilizzando alcune code contro la tabella di staging, dobbiamo caricare i buoni record nella tabella reale con un altro inserto - tramite insert select o merge - ma si tratta di un approccio efficiente? Sono preoccupato perché sarebbe simile a fare 2x inserti.

Sto pianificando di utilizzare .net sqlbulkcopy per fare inserimenti in blocco e non ha un chiaro rapporto di errore.

Qualcuno può indicarmi una soluzione più efficiente?

EDIT: Se questo approccio è l'unica soluzione, quale metodo pensi sia il migliore per il secondo inserto? È inserire ... selezionare o MERGE? Avrebbero abbinato l'efficienza e la velocità di BULK INSERT? O c'è qualche altra alternativa migliore?

Grazie!

Risposta popolare

Personalmente non considererei i record 2 / 3M come una grande quantità. A meno che non siano necessari i dati in pochi secondi, un inserto Single (non Bulk) funzionerà adeguatamente.

Se sono nervoso per la qualità dei dati src - mi piace caricare prima una tabella stg e poi fare "Soft RI" - Controlla PK, UQ, FK ecc. Usando SQL. Se sono preoccupato per problemi di tipo numerico / non numerico o di data scadente, faccio in modo che la tabella Stg VARCHAR (8000) per tutti i punti e utilizzi TRY_CONVERT durante la lettura dalla tabella.

Una volta che i dati sono in STG, puoi facilmente filtrare solo le buone righe e riportare in dettaglio le righe non valide.



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é