Dubbio su SSIS e Package Configurations

martedì 23 agosto 2011 - 17.12
Tag Elenco Tags  Windows XP  |  Visual Studio 2005  |  SQL Server 2005

luca1988 Profilo | Newbie

Ciao a tutti, dato che è il mio primo post mi presento velocissimamente: sono Luca, ho 23 anni e, dopo aver utilizzato per un bel po' C# ora sto iniziando ad entrare un po' più nel vivo del mondo SQL Server.

In particolare in questo momento sto utilizzando SSIS (Sql Server 2005). In merito ho un dubbio che mi piacerebbe risolvere:

Ho creato una tabella sul DB in modo da gestire lo scambio di valori tra i task SQL (e le pagine del portale) e le elaborazioni fatte con i dtsx. Mi spiego meglio:

Ho creato la tabella SSIS_Configurations (ConfigurationFilter, ConfiguredValue, PackagePath, ConfiguredValueType, IdRecord) che deve contenere i valori delle variabili da utilizzare nel dtsx. In particolare voglio mappare due variabili: "Path" e "Output". Naturalmente in ConfiguredValue c'è il valore e in PackagePath il nome della variabile interna (nel mio caso "\Package.Variables[User::Path].Properties[Value]" e "\Package.Variables[User::Output].Properties[Value]")

0) Nel dtsx ho configurato questa tabella come "scambio di dati" andando in SSIS > Package Configurations e "mappando" due variabili interne al dtsx (sempre "Path" e "Output", proprietà "Value" per entrambe) con quelle della tabella a cui ho fatto riferimento poco sopra.
1) Dalla Stored Procedure scrivo il valore "D:\test.bat" nel campo "Path" della tabella
2) Lancio il dtsx e legge correttamente il valore "D:\test.bat" dalla variabile interna
3) Utilizzo questa variabile come nome del file da lanciare con un "Execute Process Task". Nelle proprietà di quest'ultimo imposto "StandardOutputVariable" con l'altra variabile mappata ("Output"). Lo scopo è ovvio: il task lancia un bat che, in questo caso, fa la copia di un file e in "StandardOutputVariable" compare la stringa "... 1 file(s) copied ...". Ok, questo valore viene inserito nella variabile Output.Value. E qui io mi aspettavo che, essendo la variabile mappata, questo valore venisse scritto anche sul DB, nella tabella creata precedentemente. Invece nulla..

Mi chiedo: con Package Configurations è possibile solamente "inviare" valori in ingresso da sql alle variabili dtsx oppure è anche possibile (e, se si, quali sono i passi che mi mancano) "esportare" valori dalle variabili dtsx a sql?

No so se mi sono spiegato. Nel caso il problema non fosse chiaro cercherò di essere più preciso ;-)

Grazie comunque in anticipo per l'attenzione e per le eventuali risposte..

Luca

alx_81 Profilo | Guru

>Ciao a tutti, dato che è il mio primo post mi presento velocissimamente:
>sono Luca, ho 23 anni e, dopo aver utilizzato per un bel po'
>C# ora sto iniziando ad entrare un po' più nel vivo del mondo SQL Server.
Ciao e benvenuto su dotnethell!

>Mi chiedo: con Package Configurations è possibile solamente "inviare"
>valori in ingresso da sql alle variabili dtsx oppure è anche
>possibile (e, se si, quali sono i passi che mi mancano) "esportare"
>valori dalle variabili dtsx a sql?
Cerco di capire la domanda.. stai chiedendo se la config è readonly oppure se puoi cambiare i valori successivamente per riusarli?

>Grazie comunque in anticipo per l'attenzione e per le eventuali risposte..
di nulla!

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

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

luca1988 Profilo | Newbie

più o meno ;-)

sto cercando di capire questo:

1) Salvo il valore "PROVA-INPUT" nel campo "ConfiguredValue" della tabella "SSIS_Configurations" di cui ho parlato nel primo post (il campo "PackagePath" contiene il valore "\Package.Variables[User::Path].Properties[Value]") <-- OK, FUNZIONA
2) Lancio il DTSX e la variabile INTERNA "User::Path" contiene il valore "PROVA-INPUT" prelevato dalla tabella SQL mappata <-- OK, FUNZIONA
3) All'interno del DTSX cambio il valore della variabile "User::Path" e lo modifico in "PROVA-OUTPUT" <-- OK, FUNZIONA
4) All'interno del DTSX leggo il valore corrente della variabile "User::Path" aspettandomi di ricevere "PROVA-OUTPUT" <-- OK, FUNZIONA
5) Dato che il DTSX è stato "capace" di trasferire il valore "PROVA-INPUT" dalla tabella SQL alla variabile DTSX, mi aspettavo che fosse anche in grado di AGGIORNARE il valore della tabella SQL quando, all'interno del DTSX stesso, cambia il valore della variabile "User::Path" <-- NON FUNZIONA, SULLA TABELLA SQL RIMANE SETTATO IL VALORE "PROVA-INPUT".

Dunque: DTSX è solamente in grado di LEGGERE i valori da una tabella SQL mappata per trasferirli poi nelle rispettive variabili interne OPPURE può anche aggiornare la tabella SQL quando cambiano i valori delle rispettive variabili interne?

Chiedo scusa per la (probabile) confusione, SSIS è un mondo nuovo per me ;-)

alx_81 Profilo | Guru

>5) Dato che il DTSX è stato "capace" di trasferire il valore
>"PROVA-INPUT" dalla tabella SQL alla variabile DTSX, mi aspettavo
>che fosse anche in grado di AGGIORNARE il valore della tabella
>SQL quando, all'interno del DTSX stesso, cambia il valore della
>variabile "User::Path" <-- NON FUNZIONA, SULLA TABELLA SQL
>RIMANE SETTATO IL VALORE "PROVA-INPUT".
Eh no, non è in grado perchè non c'è una reference come se fosse un oggetto (stesso "puntatore") e non c'è niente che le tiene legate.

>Dunque: DTSX è solamente in grado di LEGGERE i valori da una
>tabella SQL mappata per trasferirli poi nelle rispettive variabili
>interne OPPURE può anche aggiornare la tabella SQL quando cambiano
>i valori delle rispettive variabili interne?
C'è un momento all'inizio dell'esecuzione in cui tutti i mapping della config vengono realizzati. Il mapping è unidirezionale, ovvero "leggo da tabella,xml,environmentvar,registry,ecc.. e scrivo su var o proprietà ssis"

Se vuoi appoggiare le var per esecuzioni successive puoi sempre usare altri metodi come files, var globali da passare ad un eventuale execute package, scrivere su un'altra tabella, ecc.
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

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

luca1988 Profilo | Newbie

Thanks, allora ho risolto in questo modo:

1) Lancio un "Execute Process Task" impostando dinamicamente il campo "Executable" in base al contenuto "prelevato" dalla tabella SQL (lo scopo della mappatura delle variabili era proprio quello di modificare di volta in volta il BAT da eseguire)
2) Salvo lo "StandardOutputVariable" del task in oggetto in una variabile DTSX
3) Utilizzo uno "Script Task" per fare altre cose e, nel contempo, eseguire una query di UPDATE sul DB per inserire il nuovo valore dello StandardOutputVariable (ad ogni esecuzione mi interessa "stampare a video" il risultato del BAT eseguito).

Spero possa essere d'aiuto per altri utenti.

Grazie ancora per i chiarimenti,

Luca

alx_81 Profilo | Guru

>3) Utilizzo uno "Script Task" per fare altre cose e, nel contempo,
>eseguire una query di UPDATE sul DB per inserire il nuovo valore
>dello StandardOutputVariable (ad ogni esecuzione mi interessa
>"stampare a video" il risultato del BAT eseguito).
>Spero possa essere d'aiuto per altri utenti.
>
>Grazie ancora per i chiarimenti,
grazie a te
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5