Restricciones de precedencia, orden de escritura del código y algunos casos de error en las tareas de paquetes SSIS

Volvamos al paquete que hemos creado, explorado y ejecutado. Como empleamos el Asistente de importación y exportación, en una única tarea SSIS concentra todas las instrucciones para eliminar las tablas antes de volverlas a crear.  La primera vez, no tiene nada que eliminar, crea lo que necesita e importa, todo bien. Si al menos una de las tablas involucradas no se puede eliminar devuelve error, vamos a detenernos un poco ante esta situación.

1.- Error en la primera instrucción de código T-SQL

Tenemos dos tablas creadas Product y ProductCategory, de ellas eliminamos Product

impexpEliminarProducto

Con este código, donde aparece primero la tabla Product, vemos que se producen dos errores, no se ejecuta la tercera tarea y al final se crean las dos tablas.

impexprojorojoblanco

Regresamos a la ficha Resultados de la ejecución, vemos que por una parte, no puede eliminar la tabla Product, porque no existe; pero además, no puede volver a crear ProductCategory, porque no la eliminó, cuando se produjo el error sobre Product, el código no se siguió ejecutando.

impexpinforme2errores

En el caso de la segunda tarea, la experiencia que he observado, especialmente en los cursos que he impartido es que mis alumnos se confunden, porque parece que el código está bien escrito, comienza con IF NOT EXISTS; pero cuidado, que está preguntando por el esquema, no por las tablas, por lo que a pesar de cuidar el esquema, descuida validar la existencia de tablas.

impexpifnotexist

Entonces, al final, tenemos las dos tablas, porque no eliminó ProductCategory, y creó Product, que a su vez se crea antes de intentar crear ProductCategory, (esto parece un trabalenguas).

Peeero, y nunca falta “un pero”, 🙂 cuidado, muuucho cuidado, porque no se ha ejecutado la Tarea de Flujo de datos. Esto se debe a que la Restricción de precedencia está definida con valor Correcto y color verde, de la siguiente forma:

impexprestriccioncorrecto, por tanto, es necesario que la tarea precedente se ejecute correctamente, y su color final sea Verde, como la flecha, para que se pueda ejecutar la siguiente tarea, que permanecerá en blanco hasta entonces. (En la próxima entrada vamos a “jugar” un poco con estos colores.)

El efecto entonces es el siguiente: Product que se ha creado, no se ha rellenado, está vacía.

impexpproductosvacios

Por su parte, ProductCategory no se actualizó, así que si el objetivo era reemplazar la tabla con las Categorías existentes por otras nuevas, tampoco está bien.

2.- Error después de ejecutar parte del código T-SQL

Si el código de la Tarea SQL fuese distinto, como vemos en la figura, se eliminaría ProductCategory, y no Product porque no existe y luego, como no existe ninguna, se crearían las dos y se importarían los datos, sin más problemas.

impexpeliminacategoyprodu

Conclusiones: Lo suyo es siempre curarse en salud y programar el tratamiento de errores. Todo lo que sabemos de buenas prácticas con T-SQL, permanece vigente en SSIS. En este caso, hay que comprobar si existe, y si no existe, pues no intentar eliminar. Y si existe, pues no intentar crear, es evidente no?

Para la próxima veremos cómo funcionan los colores y qué ocurre al deshabilitar tareas.

Hasta entonces,

Saludos,

Ana