SSIS: utilizzo del lookup per inserire / aggiornate tabella di destina...

martedì 22 settembre 2009 - 10.01

the_driver Profilo | Senior Member

Ciao a tutti, ho il seguente problema:
Ho 2 db che hanno una tabella uguale chiamata sys_Utenti. Dovrei poter leggere i dati della tabella e quindi trasferirli nella tabella di destinazione, ma vorrei procedere in questo modo: se nella tabella di destinazione è già presente un record con lo stesso id (nel mio caso l'id è il campo usr_cod) allora deve fare un update del record con i valori della tabella sorgente,viceversa, se non è presente devo fare un inserimento.

Premesso che ho letto l'utile articolo di di alex81 sul lookup ma ho molti dubbi:

prima di tutto pensavo di procedre cosi:

Inserisco un DATAFLOW, quindi all'interno inserisco un OLEDB Source che punta alla tabella del DB di orgine, quindi inserisco un LOOKUP che fa riferimento alla tabella di destinazione,mappando solo il campo usr_cod (giusto? il lookup va fatto sulla tabella di destinazione?) . Dal lookup collego un OLEDB destination (che punta alla tabella di destinazione che non ha il record cercato) alla freccia verde mentre alla rossa come faccio a richiamare l'update?


grazie!



ps. è la prima volta che utilizzo il componente di llok up,sarei tentato di risolvere il tutto con una query strutturata e delle procedure, ma per comodità e velocità(visto il numero di campi)preferisco SSIS

alx_81 Profilo | Guru

>Ciao a tutti, ho il seguente problema:
Ciao

>Premesso che ho letto l'utile articolo di di alex81 sul lookup ma ho molti dubbi:
allora mi sono spiegato male

Il discorso è semplice, il lookup task serve per controllare con una chiave l'esistenza di un particolare record ed eventualmente ricavarne valori aggiuntivi.
Per rispondere alla tua domanda, sì, devi farlo sulla tabella di destinazione. Se il tuo campo user_cod è la chiave di ricerca allora quello è il campo corretto.
Fossi in te non punterei alla tabella diretta ma userei un comando sql, ad esempio un
SELECT user_cod FROM tabelladestinazione

In questo modo poi, farai puntare il tuo metadato con la colonna ricavata e sei a posto. Infine configuri l'Error Output per "far apparire" la freccia rossa (impostando redirect row) e lì collegherai le insert eventuali. Alla freccia verde collegherai l'OLEDB Command per l'update.

>grazie!
di nulla!
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

the_driver Profilo | Senior Member

Ciao Alex,grazie mille dei consigli .... ma quello che non capisco è come faccio a fare l'update.

Nel senso che, da quello ho capito:

ho un elenco di record letti da una tabella, lookup (per ogni singolo record) verifica se sono presenti nella tabella destinazione. In caso negativo fa l'insert del record (o di tutti quelli non presenti? l'insert avviene tramite OLEDB destination?) viceversa,se non presente, devo fare l'update del record ... ma come lo implemento l'update con SSIS?

Nel mio caso devo fare l'update di una tabella che ha circa 20 campi,mi assicuri che OLEDB command fa questo?

grazie mille!

the_driver Profilo | Senior Member

Ok sono riuscito a fare il look ed inserire i valori se non presenti.... purtroppo non riesco a fare l'update.

Ho inserito il componente OLEDB Command, l'ho collegato alla freccia verde e quindi l'ho configurato.

Aprendo le proprietà, ho impostato come connection il db di destinazione ,ma nella schermata di mapping la tabella di destinazione mi rimane vuota.....

Inoltre come sql statement cosa devo impostare?

Ti ringrazio!

alx_81 Profilo | Guru

L'inserimento è una semplice OLEDBDestination

>Inoltre come sql statement cosa devo impostare?
se non metti lo statement in mapping non vedi nulla. Devi scrivere il comando nella forma:

UPDATE tabella SET campo1 = ?, campo2 = ?, ...., campoN = ? WHERE campoFiltro1 = ? AND CampoFiltro2 = ?

Così nel mapping vedrai posizionalmente i parametri da mappare ai metadati.
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

the_driver Profilo | Senior Member

Ok, ti ringrazio! funziona tutto bene!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5