Como @Yuck y @devarc han notado, hay dos valores diferentes y distintos a variables sostiene El valor de tiempo de diseño es el valor que asigna cuando se crea la variable por primera vez. En su caso, la variable contiene C:\Test.txt como valor en tiempo de diseño. Cada vez que abra el paquete, mostrará C:\Test.txt hasta que lo cambie en
Para hacer que el valor de una variable cambie mientras el paquete se está ejecutando, sus opciones son establecer el valor o calcularlo. Aquí he creado una variable a nivel de paquete CurrentFile
con el valor de C:\Test.txt
Una cosa que a menudo hace tropezar a las personas es que han cambiado correctamente el valor de tiempo de ejecución, pero cuando lo ejecutan en BIDS, ven el valor "antiguo". El valor que se muestra en la ventana Variables no cambia durante la ejecución del paquete.
Durante la ejecución del paquete, mi ventana Variables todavía muestra el valor de tiempo de diseño (C:\Test.txt) pero el valor real se refleja en la ventana Locales (C:\Test2.txt)
Establecer un valor
El valor de casi todo en SSIS se puede establecer en tiempo de ejecución a través de un conjunto detallado de opciones de la línea de comandos o mediante configuración fuentes. La mayor diferencia en mi opinión es que este enfoque es que el valor siempre será el valor durante toda la vida útil de la ejecución del paquete. Las invocaciones secuenciales o paralelas de un paquete pueden cambiar ese valor pero para eso ejecución el valor permanecería constante (salvo una modificación explícita del valor.
/SET
La ejecución de la línea de comandos (dtexec.exe), hacer clic con el botón derecho en un paquete y ejecutarlo desde el sistema de archivos (dtexecUI.exe) o crear un paso de trabajo del Agente SQL de SQL Server Integration Services permiten proporcionar un valor de tiempo de ejecución a través del comando SET . Usando la variable anterior, el siguiente comando establecería el valor de tiempo de ejecución en C:\Test2.txt
dtexec /file C:\Generated.dtsx /set \Package.Variables[User::CurrentFile].Properties[Value];"C:\Test2.txt"
Configuración
SSIS ofrece una opción para crear orígenes de configuración para proporcionar valores de tiempo de ejecución a los paquetes. El artículo al que vinculé anteriormente hace un trabajo mucho mejor al describir los pros y los contras de las opciones de configuración que el que haré aquí. Diré que normalmente uso ambos:mi comando SET configura un administrador de conexión que luego usa el paquete para encontrar el conjunto "completo" de configuraciones de paquetes.
Calcular un valor
Hay una variedad de tareas en SSIS que pueden cambiar el valor de una variable, así como el uso de Expresiones para cambiar un valor. Las veo como cosas que funcionan según el valor mientras el paquete está en vuelo.
Tareas
Una tarea de secuencia de comandos es uno de los mecanismos más utilizados por quienes comienzan, pero encuentro otras herramientas en el kit de herramientas de SSIS que suelen ser más adecuadas para cambiar los valores de las variables.
Contenedor de bucles Foreach y Ejecutar tarea SQL son dos de las otras grandes tareas que debe considerar para la asignación de un valor variable.
Expresiones
Las expresiones son el dulce más glorioso en la caja de herramientas de SSIS. La mayoría de las "cosas" en SSIS exponen propiedades para la configuración. Eso es útil, pero usar la asignación de una expresión para construir esas propiedades es excelente.
Por ejemplo, imagina 3 variables RootFolder
, FileName
y ComputedCurrentFile
con valores de C:\, File2.txt y cadena vacía. En la ventana Propiedades de ComputedCurrentFile
cambiaríamos el valor de EvaluateAsExpression de False a True y luego usaríamos una expresión como @[User::RootFolder]+ "\\" [email protected][User::FileName]
Eso simplemente concatena el valor de las dos primeras variables juntas. Esto puede resultar útil si el nombre del archivo para el procesamiento era estándar pero la carpeta de origen cambiaba con frecuencia. O si estamos hablando de salida, es común usar expresiones para construir un nombre de archivo de salida usando la fecha y posiblemente la hora en que se está ejecutando el paquete.
Finalmente, no hay nada que impida una mezcla y combinación de estos enfoques. Por lo general, uso una configuración para apuntar un enumerador de archivos a la carpeta de inicio correcta y luego uso valores calculados para identificar el archivo actual para su procesamiento.