Newsgroup: it.comp.www.asp
Titolo: Aiuto urgente!

Salve a tutti,
gradirei avere un vostro suggerimento per la soluzione più appropriata
per effettuare un caricamento di dati da un foglio excel in un db su
Sql Server.
Il problema è che il foglio contiene circa 90 colonne e può contenere
in media da 100 a 500 righe di dati, inoltre ogni riga è associata ad
un campo chiave principale che è un codice alfanumerico e ad altre
chiavi indentificative secondarie tra cui nome cliente, data, sede,
etc.
In pratica ogni record rappresenta più attributi appartenenti a
diverse entità che io ho trasformato in tabelle relazionate per alcune
attraverso il codice alfanumerico identificativo di ogni riga con
relazioni 1:1 e in altre tabelle con campi identificativi
autoincrementali per le relazioni 1:M.
Potreste consigliarmi la migliore soluzione per effettuare il
caricamento sul server del foglio, il controllo delle intestazioni dei
campi da caricare, la lettura e l'inserimento dei dati nel db.
I problemi che si presentano sono diversi:
- molti campi sono ridondanti, altri sono vuoti
- la lunghezza di ogni riga che è di 90 colonne
- la verifica su tutti i campi chiave che devono essere presenti per
ogni riga
- il controllo sulla eventuale presenza dei campi chiave nel db per
evitare record duplicati
- l'inserimento di tutti e 90 i valori nelle varie tabelle relazionate
del db
Finora ho realizzato l'upload e il controllo dei campi di intestazione
nel foglio che ho dovuto ricostruire in una tabella nel db con le
posizioni delle celle e i valori da controllare, dato che le
intestazioni sono disposte a casaccio su due righe.
Per la lettura dei dati nelle righe ho instanziato un oggetto
Excel.Application e ciclando sulle riche con Cell(Riga, Colonna) mi
faccio il controllo e lettura del dato nella cella.
Ma già a questo punto ho iniziato ad avere tempi molto lunghi di
elaborazione sulle 500 righe e manca ancora la parte di inserimento nel
db!!!
Per l'inserimento nel db avevo pensato:
1) Semplicemente ad una serie di query insert e select (per recuperare
l'ultimo ID durante negli inserimenti dei record relazionati nelle
varie tabelle) quindi controllo la transazione di tutte le query per
l'inserimento di ogni singola riga del foglio attraverso i comandi
Begin/Commit.
2 Alla creazione di una stored procedure parametrizzata tramite
vbscript su cui devo ancora studiare.
3 All'utilizzo di uno dei comandi di Sql Server come IMPORT BULK, bcp
oppure creando un pacchetto DTS, ognuna di queste soluzioni però a
quando mi pare presenta vari problemi con il mio foglio excell...
Mi scuso per la lunghezza del post e spero che qualcuno sia disposto ad
illuminarmi con una soluzione.
Vi prego è molto urgente!!!!!

 Sql Server.
Ciao Egidio,
secondo me la soluzione più immediata consiste nel caricare l'intero foglio 
Excel in una tabella tramite DTS/SSIS (in base alla versione di SQL Server 
che stai utilizzando).
Una volta popolata la tabella utilizzerai i comandi T-SQL per popolare le 
altre tabelle del database ed al termine dell'operazione andrai ad eliminare 
la tabella iniziale.
Ciao!
-- 
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo
http://italy.mvps.org