none
Crear tabla en Execute SQL Task de un paquete SSIS RRS feed

  • Pregunta

  • Hola, acabo de crear un paquete de SSIS para obtener los datos de una tabla de una base de datos con un ID de producto, a partir de un fichero CSV que contiene una parte de los ID de esa tabla, es decir: 

    contenido del Fichero CSV                                 Contenido de la tabla

    ID;Descripció;....                                              ID        Precio      .....  

    1;Descripción1                                                 1            100    

    3;Descripción3                                                 2            200

    4;Descripción4                                                 3            300 

    5;Descripción5                                                 4            400

                                                                          5            500

    Lo que necesito es que se lean primero los ID del fichero, y luego sacar de la tabla a un fichero plano, los datos de esos ID y además la descripción y resto de datos del fichero CSV

    Para ello, he creado en un paquete SSIS un Execute SQL task para crear una nueva tabla en la base de datos, luego tengo un Data Flow para escribir todos los datos del fichero CSV en la tabla acabada de crear, en un segundo Data Flow hago un inner join con los resultados de las dos tablas y lo meto en un Flat File Destination y para acabar un nuevo Execute SQL Task para borrar la tabla creada al iniciar el proceso.

    El problema es que si creo la tabla a mano y quito el primer Execute SQL Task, funciona correctamente con los resultados esperados, pero si no creo la tabla, cuando ejecuto el paquete cuando intenta meter los datos del CSV, me dice que no existe la tabla.

    Alguna sugerencia de porque no me encuentra la tabla cuando se ha creado en el primer paso?

    En definitiva, como se crea una tabla física al iniciar un paquete y borrarla al final, y poder acceder a ella en el resto de DataFlows.

    Gracias



    • Editado Marcus.76 miércoles, 28 de junio de 2017 13:35
    miércoles, 28 de junio de 2017 13:15

Respuestas

  • las tareas ya se hacen por orden. esas flechas verdes que unen uno con otro son las tareas de precedencia de las que te hablaba Alberto.

    Prueba lo que yo te comentaba. 


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    jueves, 29 de junio de 2017 6:54
    Moderador
  • En las propiedades de los paquetes tienes una propiedad que se llama delay validation. Lo que puede estar pasando es que se chequee la integridad del paquete al inicio y al no exitir la tabla falle, si pones delayValidation a true, eso no se hace, simplemente se comienza a ejecutar el paquete.

    para acceder a la propiedad botón derecho en algún hueco en blanco del control flow, propiedades. 

    Prueba y nos cuentas


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    jueves, 29 de junio de 2017 6:45
    Moderador

Todas las respuestas

  • Lo que puedes hacer amigo, es crear 2 "Execute Task SQL" y crear las siguientes sentencias

    1 Execute Task SQL  ( La iniciar el proceso )

    CREATE TABLE mytable (char1 C(10), char2 C(10) NOCPTRANS,;
       memo1 M, memo2 M NOCPTRANS)


    2 Execute Task SQL  ( Al terminar el Proceso)

    DROP TABLE mytable,


    miércoles, 28 de junio de 2017 15:15
  • El caso es que lo tengo así

    El esquema es 

    Crear tabla --> Cargar FlatFile en Tabla Nueva --> Crear fichero plano --> Borrar tabla

    El crear tabla y el Borrar tabla son dos Execute SQL Task 

    En ambos casos tengo:

      La conexión correcta.

      SQLSourceType --> Direct Input

      SqlStatement --> "Create table IdProducto (ID integer,Descripcion nvarchar(100))" en el crear

                                "Drop table IdProducto" en el borrar

      ByPassPrepare --> False

    Y el caso es que parece que no ejecuta este primer paso, porque luego falla porque dice que [dbo].[IdProducto] no es válido.

    Muchas Gracias 

    miércoles, 28 de junio de 2017 15:43
  • Quiero añadir que si ejecuto los 4 pasos uno a uno funciona correctamente.
    miércoles, 28 de junio de 2017 15:51
  • ¿Tienes las tareas correctamente secuenciadas mediante restricciones de precedencia? Lo digo porque si las restricciones no estuvieran bien puestas, SSIS ejecuta las tareas en paralelo todas a la vez, con lo que la tabla se crearía y se borraría antes de que diese tiempo de hacer el trasvase de datos. Lo digo porque esta situación sería consistente con los síntomas que observas, es decir, ejecutando los pasos uno a uno funcionaría, pero fallaría al lanzarlo todo de golpe y daría el error de que la tabla no existe.

    Si puedes, ponnos aquí una captura de pantalla del diseñador del Flojo de Control, a ver si le vemos algo raro.

    miércoles, 28 de junio de 2017 17:05
  • En las propiedades de los paquetes tienes una propiedad que se llama delay validation. Lo que puede estar pasando es que se chequee la integridad del paquete al inicio y al no exitir la tabla falle, si pones delayValidation a true, eso no se hace, simplemente se comienza a ejecutar el paquete.

    para acceder a la propiedad botón derecho en algún hueco en blanco del control flow, propiedades. 

    Prueba y nos cuentas


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    jueves, 29 de junio de 2017 6:45
    Moderador
  • Buenos días, aquí tenemos el control flow de mi paquete 

    No se como indicar que se deben hacer las tareas por orden en lugar de en paralelo.

    jueves, 29 de junio de 2017 6:47
  • las tareas ya se hacen por orden. esas flechas verdes que unen uno con otro son las tareas de precedencia de las que te hablaba Alberto.

    Prueba lo que yo te comentaba. 


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    jueves, 29 de junio de 2017 6:54
    Moderador
  • Hola,

        muchísimas gracias Miguel, con la propiedad delayValidation me ha funcionado correctamente, no conocía esa propiedad.

    jueves, 29 de junio de 2017 7:16
  • De nada marcus. Lo que necesites

    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    jueves, 29 de junio de 2017 7:37
    Moderador