Inserimenti BulkCopy con DBCC CheckIdent

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

Domanda

Il nostro team ha bisogno di inserire una quantità di dati crudele nel nostro database SQL Server 2008. Stiamo cercando una buona soluzione. Ora ne abbiamo trovato uno, ma ho dei dubbi, semplicemente perché non sembra giusto. Quindi sto chiedendo qui se questa sembra una buona soluzione. Un altro problema è che si tratta di un database replicato peer-to-peer su 4 server! :)

Immagina di avere 1 milione di righe da inserire

  1. Inizia la transazione
  2. Aumentare il valore di identificazione corrente su una tabella con 1 milione
  3. Avere un DataSet / DataTable pronto con 1 milione di righe e gli ID corretti
  4. BulkCopy i dati nel database
  5. Commettere la transazione

È una buona soluzione, potremmo entrare in problemi di concorrenza, avere transazioni troppo grandi, ecc.

Risposta popolare

avrai solo problemi (per quanto posso vedere, quindi potrebbero esserci cose che trascuro!) se il database è online e gli utenti possono inserire le righe in quella tabella. Aumentare il valore dell'identità per le nuove righe nel meta-livello significa semplicemente che la riga successiva inserita dal sistema utilizzerà quel numero, quindi se la colpisci con 1 milione, significa che hai riservato quei numeri in anticipo.

Le colonne di identità sono "belle" ma hanno l'effetto collaterale che non sono trasferibili. Quindi, se devi migrare i dati su un altro DB, rendi conto che probabilmente devi modificare i dati inseriti per abbinarli al database in cui lo inserisci (poiché questo è l'ambito dei dati, il che significa che i campi di identità potrebbero entrare in collisione con le righe già presenti nella tabella ).

Se si tratta di un affare di una volta, potrebbe funzionare. Se pianifichi di farlo regolarmente, cercherò un sistema di migrazione di livello più alto in cui esegui la migrazione dei dati a nuovi valori di identità o utilizzi guid con NEWSEQUENTIALID () in modo da ottenere indici corretti e identificativi univoci e trasferibili .



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é