Le modalità di accesso ai dati del componente di destinazione OLE DB sono disponibili in due versioni: veloce e non veloce.
Veloce, "tabella o vista - caricamento rapido" o "tabella o vista variabile del nome - caricamento rapido" significa che i dati verranno caricati in modo basato su set.
Lento: la "tabella o vista" o la "tabella o la variabile del nome della vista" comporteranno che SSIS invii istruzioni di inserimento singleton al database. Se stai caricando 10, 100, forse anche 10000 righe, c'è probabilmente una differenza di prestazioni apprezzabile tra i due metodi. Tuttavia, a un certo punto saturerai la tua istanza di SQL Server con tutte queste piccole richieste difficili. Inoltre, abuserai del diavolo dal registro delle transazioni.
Perché mai vorresti i metodi non veloci? Dati errati. Se avessi inviato 10000 righe di dati e la 9999a riga avesse una data del 29-02-2015, avresti 10k inserimenti atomici e commit / rollback. Se stavo usando il metodo Fast, l'intero batch di 10k righe ne salverà tutte o nessuna. E se vuoi sapere quali righe sono state errate, il livello più basso di granularità che avrai è 10k righe.
Ora, ci sono approcci per ottenere il maggior numero possibile di dati caricati il più velocemente possibile e gestire comunque i dati sporchi. È un approccio fallimentare a cascata e sembra qualcosa del genere
L'idea è che trovi le dimensioni giuste da inserire il più possibile in uno scatto, ma se ottieni dati errati, proverai a salvare i dati in lotti successivamente più piccoli per raggiungere le righe errate. Qui ho iniziato con una dimensione di commit di inserimento massimo (FastLoadMaxInsertCommit) di 10000. Nella disposizione Riga errore, la cambio Redirect Row
da Fail Component
.
La prossima destinazione è la stessa di sopra ma qui provo un caricamento veloce e lo salvo in lotti di 100 righe. Ancora una volta, prova o fai finta di trovare una dimensione ragionevole. Ciò comporterà 100 lotti di 100 righe inviate perché sappiamo da qualche parte lì, c'è almeno una riga che ha violato i vincoli di integrità per la tabella.
Aggiungo quindi un terzo componente al mix, questa volta risparmio in lotti di 1. Oppure puoi semplicemente cambiare la modalità di accesso alla tabella dalla versione Fast Load perché produrrà lo stesso risultato. Salveremo ciascuna riga singolarmente e ciò ci consentirà di fare "qualcosa" con le singole righe errate.
Finalmente ho una destinazione sicura. Forse è la "stessa" tabella della destinazione prevista ma tutte le colonne sono dichiarate come nvarchar(4000) NULL
. Qualunque cosa finisca a quel tavolo deve essere ricercata e ripulita / scartata o qualunque sia il tuo cattivo processo di risoluzione dei dati. Altri eseguono il dump su un file flat, ma in realtà, qualunque cosa abbia senso per come si desidera tenere traccia dei dati errati funziona.