none
Ingresar clave foránea SSIS RRS feed

  • Pregunta

  • Hola, tengo un problema

    En un primer flujo de dato de mi flujo de control registro datos de una tabla1, el IdTabla1 se autogenera en mi base de datos, bueno en segundo flujo de datos debo seleccionar el ultimo IdTabla1 para ello hago "select max(IdTabla1) as UltimoIdTabla1 from Tabla1" y ese valor ingresarlo como clave foránea(Padre) de un conjunto de datos en una tabla2 y asi sucesivamente hasta terminar de leer un conjunto de archivos planos

    Ejemplo con datos

    Tabla 1

    IdTabla | Descrip1

         1              b

    Tabla2

    IdTabla2| IdTabla1 | Descrip2

           100        1            abc1
           101        1            abc2

           102        1            abc3

    concluyendo el IdTabla1 se autogenera al ingresar descrip1 a un tabla en sql en un data flow y en el mismo control de flujo en otro data flow extraigo el ultimo IdTabla1 para ingresa a un tabla2, el IdTabla2 se autogenera, y descrip2 lo ingreso de un archivo plano, todo esto en un foreach loop. No me permitieron carga una imagen por que soy nuevo T.T

    ¿Como ingreso el IdTabla1 en la Tabla2?

    Saludos. 
    jueves, 25 de abril de 2013 14:58

Respuestas

  • Hola Yan Franco.

    Usa el componente Lookup.

    Como flujo de entrada pones el proveniente de tu fichero plano. En connections pones la tabla TablaTipoProducto.

    Y en columns enlazas el CodigoTipo (Origen) con CodigoTipo(Destino).

    Y marcas la Columna IdTipo como salida.

    Ahora en tu flujo de salida tienes la nueva columna (IdTipo).

    Un abrazo.

    Héctor.

    sábado, 27 de abril de 2013 12:35

Todas las respuestas

  • Hola.

    El escenario que propones no se comprende. No puede ser que todos los registros de Tabla2 estén relacionados con el mismo de Tabla1, sería demasiado sencillo.

    En casos como estos que parece que propones, creo que es mejor que importes todos los datos a tablas SQL y luego realices la inserción de cabeceras y detalles mediante otro proceso, un procedimiento almacenado por ejemplo que sea el que realice la gestión de los identificadores.

    Acláranos el escenario para que podamos proseguir.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    jueves, 25 de abril de 2013 15:55
    Moderador
  • Gracias por responder, Re formulare mi pregunta

    Tengo un data source (archivo plano) con la siguiente estructura:

    CodigoProducto|CodigoTipo|Descripcion

    P098    |    t1   |   producto98

    P099   |     t1   |   producto99

    P100   |     t2  | producto100

    P101   |    t2  | producto101

    P102  |      t3  |  producto102             

    Estos Dato debo ingresarlos a una base de datos con la siguiente estructura, 2 tablas : tablaTipoproducto y TablaProducto

    TablaTipoProducto:

    IdTipo | CodigoTipo| DescripcionTipo 

     1 | t1  |  tipo1

     2 | t2  |  tipo2

     3 | t3 |  tipo3

    TablaProducto:

    IdProducto|IdTipo|CodigoProducto|DescripcionProducto

    101 |1|P001|producto1

    102 |1|P002|producto2

    103 |2|P003|producto3

    104 |3|P004|producto4

    los IdTipo e IdProducto son autoincrement

    ¿Como a travéz del CodigoTipo en mi archivo plano puedo seleccionar su IdTipo(Que ya existe) en mi base datos y luego insertar el respectivo IdTipo a mi TablaProducto?

    ¿Cual es la manera mas eficiente da hacer esto en un paquete SSIS?

    Saludos.








    • Editado Yan Franco viernes, 26 de abril de 2013 21:29
    viernes, 26 de abril de 2013 21:11
  • Hola Yan Franco.

    Usa el componente Lookup.

    Como flujo de entrada pones el proveniente de tu fichero plano. En connections pones la tabla TablaTipoProducto.

    Y en columns enlazas el CodigoTipo (Origen) con CodigoTipo(Destino).

    Y marcas la Columna IdTipo como salida.

    Ahora en tu flujo de salida tienes la nueva columna (IdTipo).

    Un abrazo.

    Héctor.

    sábado, 27 de abril de 2013 12:35
  • Se soluciono con un LookUp, pero se generan muchos problemas por las diferencias en el formato de datos pese a que realice conversiones... finalmente tube que utilizar algunas funciones como LTRIM para mis dos fuentes de datos y pude obtener el resultado que esperaba. Gracias
    Saludos.
    • Editado Yan Franco lunes, 29 de abril de 2013 20:20
    lunes, 29 de abril de 2013 20:18