Come hanno notato @Yuck e @devarc, esistono due valori diversi e distinti a Variabile tiene. Il valore Design-time è il valore assegnato quando la variabile viene creata per la prima volta. Nel tuo caso, la variabile contiene C:\Test.txt come valore in fase di progettazione. Ogni volta che apri il pacchetto, mostrerebbe C:\Test.txt finché non lo modifichi nel
Per modificare il valore di una variabile mentre il pacchetto è in esecuzione, le tue opzioni sono impostare il valore o calcolarlo. Qui ho creato una variabile a livello di pacchetto CurrentFile
con il valore di C:\Test.txt
Una cosa che spesso infastidisce le persone è che hanno modificato correttamente il valore di runtime ma quando lo eseguono in BIDS, vedono il valore "vecchio". Il valore visualizzato nella finestra Variabili non cambia durante l'esecuzione del pacchetto.
Durante l'esecuzione del pacchetto, la mia finestra Variabili mostra ancora il valore della fase di progettazione (C:\Test.txt) ma il valore vero si riflette nella finestra Locali (C:\Test2.txt)
Impostazione di un valore
Il valore di quasi tutto in SSIS può essere stabilito in fase di esecuzione tramite una serie di dettagli opzioni della riga di comando o tramite la configurazione fonti. La più grande differenza nella mia mente è che questo approccio è che il valore sarà sempre il valore per l'intera durata dell'esecuzione del pacchetto. Invocazioni sequenziali o parallele di un pacchetto possono modificare quel valore ma per quello esecuzione il valore rimarrebbe costante (salvo modifica esplicita del valore.
/IMPOSTA
L'esecuzione dalla riga di comando (dtexec.exe), il clic con il pulsante destro del mouse su un pacchetto e l'esecuzione dal filesystem (dtexecUI.exe) o la creazione di una fase del processo dell'agente SQL di SQL Server Integration Services consentono di fornire un valore di runtime tramite il comando SET . Utilizzando la variabile precedente, il comando seguente imposterà il valore di runtime su C:\Test2.txt
dtexec /file C:\Generated.dtsx /set \Package.Variables[User::CurrentFile].Properties[Value];"C:\Test2.txt"
Configurazione
SSIS offre un'opzione per creare origini di configurazione per fornire valori di runtime ai pacchetti. L'articolo a cui ho collegato sopra fa un lavoro molto migliore descrivendo i pro ei contro delle opzioni di configurazione rispetto a quello che farò qui. Dirò che in genere uso entrambi:il mio comando SET configura un gestore di connessione che viene quindi utilizzato dal pacchetto per trovare il set "completo" di configurazioni del pacchetto.
Calcolo di un valore
Esistono diverse attività in SSIS che possono modificare il valore di una variabile, nonché l'uso di espressioni per modificare un valore. Li vedo come cose che operano sul valore mentre il pacchetto è in volo.
Compiti
Un'attività di script è uno dei meccanismi più comunemente usati per chi inizia, ma trovo altri strumenti nel toolkit SSIS di solito più adatti per modificare i valori delle variabili.
Contenitore Ciclo Foreach e Esegui attività SQL sono due delle altre grandi attività che dovresti considerare per l'assegnazione di un valore variabile.
Espressioni
Le espressioni sono le caramelle più gloriose nella casella degli strumenti SSIS. Quasi ogni "cosa" in SSIS espone le proprietà per la configurazione. È utile, ma l'utilizzo dell'assegnazione di un'espressione per creare quelle proprietà è eccezionale.
Ad esempio, immagina 3 variabili RootFolder
, FileName
e ComputedCurrentFile
con valori di C:\, File2.txt e stringa vuota. Nella finestra Proprietà per ComputedCurrentFile
cambieremmo il valore di EvaluateAsExpression da False a True e quindi useremmo un'espressione come @[User::RootFolder]+ "\\" [email protected][User::FileName]
Questo semplicemente concatena il valore delle prime due variabili insieme. Questo può essere utile se il nome del file per l'elaborazione era standard ma la cartella di origine cambiava spesso. Oppure, se stiamo parlando di output, è comune utilizzare espressioni per creare un nome di file di output utilizzando la data e possibilmente l'ora di quando il pacchetto è in esecuzione.
Infine, non c'è nulla che impedisca una mescolanza e una corrispondenza di questi approcci. In genere utilizzo una configurazione per puntare un enumeratore di file alla cartella iniziale corretta e quindi utilizzo i valori calcolati per identificare il file corrente per l'elaborazione.