TransWikia.com

Actualizar datos en SSIS

Stack Overflow en español Asked by Guillermo Ricardo Spindola Bri on September 11, 2020

Tengo un paquete con SSIS y estoy haciendo una carga incremental de datos haciendo uso de la transformación de Lookup. Obviamente los datos que no existen en el destino se insertan, pero estoy haciendo una validación para los datos existentes que es la siguiente:

(ISNULL(ApellidoM) != ISNULL(apellidom_d) 
  || ISNULL(ApellidoP) != ISNULL(apellidop_d) || ISNULL(Area) != ISNULL(area_d) 
  || ISNULL(Direc_Deleg_Munic) != ISNULL(direc_deleg_munic_d) || ISNULL(Direc_Estado) != ISNULL(direc_estado_d) 
  || ISNULL(es_interno) != ISNULL(es_interno_d) || ISNULL(Nombre) != ISNULL(nombre_d) 
  || ISNULL(Puestos) != ISNULL(puesto_d) || ISNULL(num_empleado) != ISNULL(num_emp_d) 
  || ISNULL(fecha_ingreso) != ISNULL(fec_ingreso_d) || ISNULL(fecha_planta) != ISNULL(fec_planta_d) 
  || ISNULL(fecha_baja) != ISNULL(fec_baja_d) || ISNULL(ccostos_asignado) != ISNULL(ccostos_asignado_d)
  || ISNULL(tipo_emp) != ISNULL(tipo_emp_d))

Lo que significa que si cambia cualquiera de esos valores pase a la siguiente transformación. Estoy cambiando datos forzosamente pero no detecta ningún cambio. Será que estoy mal en algo ?

One Answer

La comprobación está mal, el ISNULL() devuelve un booleano, es decir, true o false por lo que, aunque fuerces cambios en los datos, el valor del ISNULL() es el mismo porque contiene datos por tanto, se está comparando True != True.

Para hacer la comprobación correctamente debes de quitar la parte del ISNULL() para que compare realmente el valor de cada columna.

De todas formas, hay una manera mejor de hacer esto que quieres y es mediante un hash. Generas un hash de todas las columnas menos las claves primarias (que no cambian) y esto te crea una nueva columna (tendrás que crearla en la tabla destino) con el valor. Después, con el componente Lookup recuperas esta columna de la tabla destino y comparas el hash creado en ejecución con el que está almacenado en la tabla y si el hash es distinto es que ha cambiado alguna columna y si no existe en destino pues sería una operación insert.

Aquí te dejo el link del componente de SSIS MultipleHash: https://github.com/keif888/SSISMHash/releases

Answered by kilianbs on September 11, 2020

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP