Qualcuno conosce il modo più veloce per ottenere dati da e tabella Excel (array VBA) su una tabella su SQL 2008 senza utilizzando un'utility esterna (ad esempio bcp)? Tenere presente che i miei set di dati sono in genere 6500-15000 righe e circa 150-250 colonne; e finisco per trasferire circa 20-150 di loro durante uno script batch VBA automatizzato.Il modo più veloce per trasferire i dati della tabella Excel su SQL 2008R2
Ho provato diversi metodi per ottenere grandi quantità di dati da una tabella di Excel (VBA) per SQL 2008. Ho elencato quelli sotto:
Metodo tabella 1. passaggio in array VBA e spedire stored procedure (ADO) - L'invio a SQL è SLOW
Metodo 2. Creare RecordSet disconnesso caricarlo, quindi eseguire la sincronizzazione. - Invio a SQL MOLTO LENTO
Metodo 3. Inserire la tabella nell'array VBA, eseguire il ciclo tramite matrice e concatenare (utilizzando delimitatori) quindi inviare alla stored procedure. - invio a SQL SLOW, ma più veloce metodo 1 o 2.
metodo 4. tavolo Mettere in matrice VBA, ciclo se i dell'array e concatenare (utilizzando delimitatori) quindi posizionare ciascuna riga con comando ADO recordset .AddNew. --Sending a SQL molto veloce (circa 20 volte più veloce rispetto ai metodi 1-3), ma ora ho bisogno di dividere i dati utilizzando una procedura separata, che aggiungerà significativo tempo di attesa.
metodo 5. tavolo disposero in ordine di VBA, serializzare in XML, segnala ad stored procedure come VARCHAR e specificare XML in stored procedure. - Invio a SQL INCREDIBILMENTE LENTO (circa 100 volte più lento dei metodi 1 o 2)
Qualcosa che mi manca?
-Indice non sono un problema perché sto caricando in una tabella temporanea - ma grazie, me ne ero dimenticato. Sicuramente usando una sola connessione. Per quanto riguarda l'oggetto comando ADO, l'ho provato, ma ho trovato che non è diverso nella velocità di passare a una sp. E sì, ho emesso un solo batch di aggiornamento ADO dopo aver eseguito il ciclo di aggiunta del nuovo. Il nuovo metodo .add era ed è di gran lunga il più veloce, ma solo se usato in concomitanza con il concat, che dovrebbe essere analizzato in seguito. – cshenderson
Esaminerò la modalità di recupero con registrazione in blocco. – cshenderson