Principales respuestas
Ingresar clave foránea SSIS

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 abc3concluyendo 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.
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.
- Marcado como respuesta Alberto López Grande (qwalgrande)Moderator viernes, 3 de mayo de 2013 17:38
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 -
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
-
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.
- Marcado como respuesta Alberto López Grande (qwalgrande)Moderator viernes, 3 de mayo de 2013 17:38
-
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