Problema con SSIS e ciclo ForEach

lunedì 16 febbraio 2009 - 17.12

Gluck74 Profilo | Guru

Salve, sto sviluppando un pacchetto DTSX per leggere dei file excel.
Il pacchetto è fatto così:

Ciclo ForEach file in cartella
------------DataFlow
--------------------Leggo il file excel e metto in un Dataset.
------------Eseguo uno script di controllo dati
fine

Mi succede che se il dataflow va in errore (perchè non strova il foglio giusto nel file excel), si ferma anche l'intero loop e l'intero pacchetto.
Come posso fare per saltare semplicemente questo file e far continuare il ciclo ForEach?
Ne ho provate un po ma nonriesco.
Grazie.

alx_81 Profilo | Guru

>Salve,
Ciao!

>Mi succede che se il dataflow va in errore (perchè non strova
>il foglio giusto nel file excel), si ferma anche l'intero loop
>e l'intero pacchetto.
>Come posso fare per saltare semplicemente questo file e far continuare
>il ciclo ForEach?
Se selezioni il DataFlow e apri le proprietà, vedrai che puoi impostarne una chiamata FailParentOnFailure. Metti a false quella e, per evitare di far fermare il package, metti a false anche la FailPackageOnFirstError.
Ovviamente, gestisci come meglio credi l'errore, perchè non è detto che sia dovuto alla mancanza di file.

>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

Gluck74 Profilo | Guru

le variabili che dici tu sono già a False.

Purtroppo non ricordo e non sono nemmeno riuscito a trovare come si fa da script, a leggere e gestire l'errore.
Mi ricordo che si poteve intervenire sulla sequenza logica del pacchetto, del tipo (scrivo per capirci)
dts.elementoCheMiServe.errore.Clear() o dts.elemento.errorTask=false

ma non riesco proprio a trovare il modo.
(se solo trovassi i dtsx dell'anno scorso...... accidenti!!!!)

In pratica vorrei che, dal ramo failure (quello rosso), ci attacco uno script che mi fa quello che devo far per il mio progetto, poi con un istruzione (che mi sembra esista) mi azzera l'errore del task precedente.

ciao e grazie

alx_81 Profilo | Guru

Faccio prima a farti un esempio:

1) creo un foreach che scorre n file di testo
2) per ogni file di testo imposto la sorgente del dataflow
3) se il dataflow va in errore scrivo un log e riparto senza dare errore

Ogni parte del tuo control flow che genera l'errore deve avere la proprietà MaximumErrorCount a 0 (infiniti).
Attenzione che l'esempio scorre una cartella precisa: C:\Temp.
E ogni file contiene i seguenti record:

Alessandro Alpi, 27, Via Villani 10
Michael Denny, 25, Via Roma 20
Vincenzo Violante, 39, Via Verdi 30

Inoltre la struttura di destinazione è la seguente su tempdb:
CREATE TABLE dbo.Indirizzi ( [Nome] varchar(50), [Eta] smallint, [Indirizzo] varchar(50) ) GO CREATE UNIQUE INDEX UK_dboIndirizzi ON dbo.Indirizzi (Nome) GO

L'indice serve per far andare in errore il dataflow. Quindi:

1) lancia l'sql sopra per creare la tabella su tempdb.
2) crea la cartella C:\temp e poni 3 file di esempio (.txt) che contengano tutti i tre record che ti ho passato sopra.
3) lancia il package e controlla che faccia quello che ti serve.

L'esempio è allegato.
Ciao!
--

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

Gluck74 Profilo | Guru

ok, grazie, mancava solo MaximumErrorCount a 0

Ti vorrei chiedere un altra cosa.
Si può in qualche modo azzerare l'errore? ovvero far tornare il dataflow da rosso a verde?

ciao grazie
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