Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
SSIS: come migrare un Data Driven Query Task
giovedì 24 luglio 2008 - 12.42
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
kloor
Profilo
| Newbie
7
messaggi | Data Invio:
gio 24 lug 2008 - 12:42
Salve a tutti!
Mi occupo di integrazione dati e BI e di riflesso SQLserver e mi auguro in futuro di poter dare il mio contributo...
oggi inauguro però con una domanda sui SSIS. Premetto che vengo dal mondo dei DTS, non mi occupo di programmazione (VB, quel tanto che basta) e solo mettendo le mani sui SSIS ho cominciato ad entrare in contatto con .NET...
Il consiglio che vi chiedo è: come migrare il Data Driven Query Task agli IS?
Chiaro che ciò dipende dall'uso che uno ne fa. Ebbene, io lo utilizzavo per trasferire dati tra 2 distinti DB quando volevo aggiornare tabelle di dati simili senza un TRUNCATE/INSERT completo, ma valutando, tramite lookup sulla chiave nel db di destinazione, se il record era già presente e comportandomi di conseguenza: eseguendo cioè un UPDATE dei campi correlati in caso affermativo o una INSERT se la chiave non risultava presente.
Andando avanti per intuizione ho utilizzato un For Each Loop container (per ogni riga da trasferire) al cui interno ho messo un Data Flow con un Lookup ed un OLEDB Command o Destination a seconda del risultato del Lookup. Purtroppo questa modalità si rivela estremamente leeeenta, impiegando almeno un secondo per riga. Avendo tabelle con millemila righe mi vien male a pensarci
Ci sono alternative possibili secondo voi?
Oppure (girando la frittata) sbaglio qualche impostazione nel pacchetto (a.e. ho provato a cambiare il BypassPrepare, delayvalidation senza successo)?
Grazie per l'aiuto ;)
M.
kloor
Profilo
| Newbie
7
messaggi | Data Invio:
gio 24 lug 2008 - 14:11
Che semo!
Mi ero dannato a cercare nel forum qualche risposta e la trovo nel thread di fianco... come non detto...
O Lookup o sproc, pare non ci siano alternative.
Ciao,
M.
M.
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
gio 24 lug 2008 - 14:26
>Mi ero dannato a cercare nel forum qualche risposta e la trovo nel thread di fianco... come non detto...
>O Lookup o sproc, pare non ci siano alternative.
eheh.. mi sembra di averlo già visto
Benvenuto su dotnethell!
--
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
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
gio 24 lug 2008 - 14:33
>Ci sono alternative possibili secondo voi?
Sai che però ho pensato che forse un modo più veloce c'è?
Se i dati sono su due db distinti, potresti fare tutto senza lookup.
Potresti pensare di utilizzare l'Execute SQL Task sul control flow, facendo magari un linked server. In questo modo, potresti fare una UPDATE FROM (con la join sulla chiave che avresti usato per il lookup) di tutti gli "uguali", andando ad inserire direttamente senza controlli quelli che non rispettano la join..
In poche parole due Execute SQL Task, uno che fa la update degli uguali e uno che fa la insert dove la join non si verifica.. una semplice left join. Due operazioni set based, e riduzione dello stress macchina/cpu..
--
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
kloor
Profilo
| Newbie
7
messaggi | Data Invio:
gio 24 lug 2008 - 14:48
Ciao Alx e grazie per la risposta...
In effetti parlando di sproc pensavo proprio a due query consecutive UPDATE ed INSERT appunto:
UPDATE destTable
set dest1=source1, ...
FROM sourceTable INNER JOIN destTable ON sourcePK=destPK;
INSERT INTO destTable
SELECT source1, source2, ...
FROM sourceTable LEFT OUTER JOIN destTable ON sourcePK=destPK
Poi tutto impacchettato o in un unica sproc ed OLEDB Command oppure come suggerisci tu in 2 distinti Execute SQL Task.
A pelle meglio la seconda... senza particolari ragioni oggettive ;)
M.
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
gio 24 lug 2008 - 14:55
>Poi tutto impacchettato o in un unica sproc ed OLEDB Command
>oppure come suggerisci tu in 2 distinti Execute SQL Task.
Io ne farei due solo per ragioni di modularità e di eventuale rilascio distribuito o manutenzione..
Puoi cambiare logica su una e non sull'altra cambiando solo una delle sp, ma puoi decidere tu
Poi c'è anche il log, che potrebbe essere comodo, ma anche quello sta a te definirlo o meno dentro alle sp o al ssis..
--
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
Torna su
Stanze Forum
Elenco Threads
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 !