Comme @Yuck et @devarc l'ont noté, il existe deux valeurs différentes et distinctes a variable tient. La valeur au moment de la conception est la valeur que vous affectez lors de la première création de la variable. Dans votre cas, la variable contient C:\Test.txt comme valeur au moment de la conception. Chaque fois que vous ouvrez le package, il affichera C:\Test.txt jusqu'à ce que vous le changiez dans le
Pour modifier la valeur d'une variable pendant l'exécution du package, vos options sont soit de définir la valeur, soit de la calculer. Ici, j'ai créé une variable au niveau du package CurrentFile
avec la valeur de C:\Test.txt
Une chose qui fait souvent trébucher les gens est qu'ils ont correctement modifié la valeur d'exécution, mais lorsqu'ils l'exécutent dans BIDS, ils voient l'"ancienne" valeur. La valeur affichée dans la fenêtre Variables ne change pas pendant l'exécution du package.
Pendant l'exécution du package, ma fenêtre Variables affiche toujours la valeur au moment de la conception (C:\Test.txt) mais la vraie valeur est reflétée dans la fenêtre Locals (C:\Test2.txt)
Définir une valeur
La valeur de presque tout dans SSIS peut être établie au moment de l'exécution grâce à un ensemble de options de ligne de commande ou via configuration sources. La plus grande différence dans mon esprit est que cette approche est que la valeur sera toujours la valeur pour toute la durée de vie de l'exécution du package. Les invocations séquentielles ou parallèles d'un package peuvent modifier cette valeur mais pour ça exécution la valeur resterait constante (sauf modification explicite de la valeur.
/SET
L'exécution de la ligne de commande (dtexec.exe), le clic droit sur un package et l'exécution à partir du système de fichiers (dtexecUI.exe) ou la création d'une étape de travail de l'agent SQL de SQL Server Integration Services permettent tous de fournir une valeur d'exécution via la commande SET . En utilisant la variable ci-dessus, la commande suivante définirait la valeur d'exécution sur C:\Test2.txt
dtexec /file C:\Generated.dtsx /set \Package.Variables[User::CurrentFile].Properties[Value];"C:\Test2.txt"
Configuration
SSIS offre une option pour créer des sources de configuration afin de fournir des valeurs d'exécution aux packages. L'article auquel j'ai lié ci-dessus décrit bien mieux les avantages et les inconvénients des options de configuration que je ne le ferai ici. Je dirai que j'utilise généralement les deux - ma commande SET configure un gestionnaire de connexions qui est ensuite utilisé par le package pour trouver l'ensemble "complet" des configurations de package.
Calculer une valeur
Il existe une variété de tâches dans SSIS qui peuvent modifier la valeur d'une variable ainsi que l'utilisation d'expressions pour modifier une valeur. Je les vois comme des choses qui fonctionnent sur la valeur pendant que le colis est en vol.
Tâches
Une tâche de script est l'un des mécanismes les plus couramment utilisés pour ceux qui débutent, mais je trouve que d'autres outils de la boîte à outils SSIS sont généralement mieux adaptés pour modifier les valeurs des variables.
Conteneur de boucle Foreach et Exécuter la tâche SQL sont deux des autres grandes tâches que vous devriez examiner pour l'attribution d'une valeur variable.
Expressions
Les expressions sont les bonbons les plus glorieux de la boîte à outils SSIS. Presque chaque "chose" dans SSIS expose des propriétés pour la configuration. C'est utile, mais l'utilisation de l'affectation d'une expression pour créer ces propriétés est exceptionnelle.
Par exemple, imaginez 3 variables RootFolder
, FileName
et ComputedCurrentFile
avec les valeurs de C:\, File2.txt et une chaîne vide. Dans la fenêtre Propriétés de ComputedCurrentFile
nous changerions la valeur de EvaluateAsExpression de False à True, puis utiliserions une expression telle que @[User::RootFolder]+ "\\" [email protected][User::FileName]
Cela concatène simplement la valeur des deux premières variables ensemble. Cela peut être utile si le nom du fichier à traiter était standard mais que le dossier source changeait souvent. Ou si nous parlons de sortie, il est courant d'utiliser des expressions pour créer un nom de fichier de sortie en utilisant la date et éventuellement l'heure d'exécution du package.
Enfin, rien n'empêche un mix and matching de ces approches. J'utilise généralement une configuration pour pointer un énumérateur de fichiers vers le bon dossier de départ, puis j'utilise des valeurs calculées pour identifier le fichier actuel à traiter.