Il mio scopo qui è di trovare la soluzione migliore e fattibile per il mio dilemma. Voglio importare qualche file csv (può contenere circa 50 ~ 60K record) nel database dopo qualche manipolazione nei file, la manipolazione include il confronto come un record già esistente nel database o meno. Ho già un'applicazione .net c # che
- ottiene il file
- recupera i dati in datatable
- effettua il ciclo di ogni record, effettua il confronto per ogni record dal database
- e infine aggiorna / crea / elimina record.
questo intero processo apparentemente richiede troppo tempo. Il mio cliente ha bisogno che questo processo funzioni il più velocemente possibile. Gli ho suggerito di eseguire questo processo di importazione solo con SQL (anche se non sono sicuro che funzionerebbe in modo più efficiente utilizzando funzionalità SQL come la tabella di staging, la tabella temporanea ei cursori).
Ora per SQL questo è quello che pensavo potesse essere fatto per farlo funzionare meglio:
- crea una tabella di staging
- utilizzando la funzione BULK IMPORT o SQLBULKCOPY importa tutti i dati del file csv in questa tabella di staging.
- crea un SP che passa in rassegna (usando CURSOR ofcourse) tutti i record dalla tabella di staging e confronterà ogni record dalla tabella db già esistente e creerà / aggiornerà / eliminerà il record di conseguenza.
- tabella di staging vuota.
Non sono sicuro che la versione SQL funzionerebbe in modo più efficiente nel mio caso o meno. In totale non sono in grado di vedere una visione chiara del fatto che dovrei andare con la versione SQL della soluzione o attenermi all'attuale codice .net C # e ottimizzare solo questo codice corrente. Sarebbe bello se qualcuno mi potesse consigliare sullo stesso.
lascia che ti spieghi questo con l'aiuto di un esempio:
- questi sono gli header del file csv: StudentId, StudentFname, StudentLname, ClassName, teacherId, teacherFname, teacherLname
- Supponiamo di aver copiato tutti i suoi dati così come sono nella tabella di staging.
- ora devo aggiornare quegli studenti che sono già nella tabella STUDENT e creare quelli che non esistono, controllare se il nome della classe esiste già nella tabella CLASS (se non è quindi creare la classe), controllare se l'ID insegnante esiste già in Tabella INSEGNANTE (se non lo è, crea l'insegnante, altrimenti aggiornalo).