ssis - job - integration services sql server 2014
BifurcaciĆ³n despuĆ©s de una tarea del sistema de archivos en SSIS sin fallar el paquete (9)
Me he encontrado con este problema exacto y siempre he usado una tarea de secuencia de comandos. No creo que haya una mejor solución.
Si falla una tarea del sistema de archivos, como un cambio de nombre, por ejemplo, si el archivo no existe, SSIS lo considera un error. Esto significa que todo el paquete falla. Puedo solucionarlo utilizando una tarea de script o estableciendo los errores máximos para el paquete en más de uno. El problema de establecer errores máximos para el paquete en más de uno es que si se produce un error en otro lugar del paquete, el paquete no fallará cuando debería.
Entonces, ¿hay alguna forma de solucionar el error de alguna manera y aún así poder bifurcar en función del éxito o el fracaso de la tarea del sistema de archivos? Traté de pegar la tarea de archivo en un contenedor de secuencia con ForceExecutionResult establecido en Success, pero el paquete aún falla diciendo que se alcanzó el recuento máximo de errores.
No he intentado esto con una tarea FS, pero funciona bien para flujos de datos ... ¿Qué hay de envolver su tarea del sistema de archivos en un contenedor de secuencia ... Si el paso falla, el contenedor falla, simplemente podría salir desde el contenedor a un camino de éxito / fracaso ...
Compruebe las propiedades FailPackageOnFailure y FailParentOnFailure de la tarea FileSystem y asegúrese de que estén configuradas en False. Además, aumente la propiedad MaximumErrorCount del paquete.
Esta combinación permitirá que la tarea falle y el paquete se complete correctamente.
Puede usar restricción en la conexión. Haga clic derecho en la flecha de conexión entre los componentes de SSIS y puede especificar,
Éxito / Fracaso y redirigir.
La respuesta de prashant_sp es la correcta, solo tiene que continuar de forma incondicional a la siguiente tarea, al no seleccionar la restricción de prioridad de flujo de trabajo "en el éxito", sino la de "redirigir" que siempre continuará, incluso si la tarea de FS falla (la carpeta no no existe, etc.)
Saludos cordiales
Use una combinación de expresión y restricción en el conector de "restricción de precedencia". devuelve el éxito siempre de tu tarea anterior (puede ser un script que busque el archivo) y si se encuentra un archivo, establece una variable. en la expresión de la restricción de "precedencia", compruebe el valor de la variable y devuelva verdadero o falso. Si su expresión se evalúa como falsa, el paquete no continuará y, sin embargo, no verá ningún error. - Mayukh
Aquí hay una posible opción. Puede cumplir los requisitos mencionados en la pregunta cambiando la Precedence Constraint
después de la Tarea del sistema de archivos hasta la Completion
. El siguiente ejemplo muestra cómo se puede hacer esto. El ejemplo se creó utilizando SSIS 2008 R2
pero también es cierto para las versiones anteriores.
Proceso paso a paso:
Cree un paquete SSIS y cree dos variables como se muestra en la captura de pantalla n. ° 1 . Asigne algunos valores de ruta de archivo inexistentes a la variable.
En la ficha Flujo de control del paquete, realice una Tarea del sistema de archivos, Tarea de secuencia de comandos y Tarea de flujo de datos como se muestra en la captura de pantalla n. ° 2 . La Tarea de secuencia de comandos y la Tarea de flujo de datos son ficticias aquí y las tareas no están configuradas para realizar ninguna acción.
Configure la Tarea del sistema de archivos como se muestra en la captura de pantalla n. ° 3 .
La captura de pantalla n. ° 4 muestra la ejecución del paquete y, como era de esperar, la tarea del sistema de archivos falló porque las rutas de archivos no existen. Además, el paquete dejó de ejecutar las tareas después de la tarea del sistema de archivos debido al error.
Haga clic con el botón derecho en la flecha de restricción de precedencia entre
File System Task
yScript Task
y seleccione Completion como se muestra en la captura de pantalla n. ° 5 . La flecha debe cambiar de color verde a azul .La captura de pantalla n. ° 6 muestra la ejecución del paquete después del cambio de la restricción de precedencia. La tarea del sistema de archivos aún falló, pero las otras tareas continuaron ejecutándose.
Earlier
, la condición era ejecutar la Tarea de secuencia de comandos solo si la Tarea del sistema de archivos tenía éxito .Now
, la condición es ejecutar la Tarea de secuencia de comandos una vez que la Tarea del sistema de archivos finalice su ejecución (independientemente del éxito o la falla).Si desea que el paquete tome dos rutas diferentes según el éxito / fracaso. Puede hacerlo como se muestra en las capturas de pantalla # 7 y # 8 . La flecha roja indica que la ruta se tomará en caso de falla de la tarea del sistema de archivos y la flecha verde indica que se tomará la ruta al ejecutar con éxito la tarea del sistema de archivos. Tengo un archivo creado en la ruta
C:/temp/Source.txt
antes de la ejecución del paquete que se muestra en la captura de pantalla # 7 . Una vez que se ejecutó el paquete, se renombró el archivo y la ruta ya no existía. Por lo tanto, el paquete falló como se muestra en la captura de pantalla n. ° 8 .
Espero que ayude.
Captura de pantalla n. ° 1:
Captura de pantalla n. ° 2:
Captura de pantalla n. ° 3:
Captura de pantalla n. ° 4:
Captura de pantalla n. ° 5:
Captura de pantalla n.º 6:
Captura de pantalla n. ° 7:
Captura de pantalla n. ° 8:
Haga que la propiedad "Forzar ejecución de resultados" sea exitosa para la tarea del sistema de archivos.
Sé que esta es una vieja pregunta, pero podría ayudar a alguien a buscar una respuesta.
Combinado con la muy buena respuesta de user756519, detener la propagación del error evita que el paquete falle. Esto significa que puede utilizar eficazmente la falla como una bifurcación sin preocuparse de que reduzca su paquete.
Ver la respuesta de cfrag en esta pregunta para más información. Esa respuesta apunta a esta entrada de blog que explica cómo establecer la variable de propagación para el controlador de eventos OnError (crear el controlador de eventos, abrir la vista de variables, mostrar las variables del sistema, establecer Propogate en falso).