Extraer diferencias entre 2 tablas

arno
14 de Febrero del 2005
Hola a [email protected]! a ver si alguien me puede echar una mano con esto:
Necesito comparar 2 tablas para saber que datos han sido modificado/añadidios/borrados en una respecto a la otra, como podría obtenerlo?

Ojala me podais ayudar. Un Saludo.

rla
14 de Febrero del 2005
Con un programa que recorra la primera tabla y la compare con la segunda, una paja pero es lo que se me ocurrio 1ero.
puede ser el 1er registro de la 1era tabla y el 1er registro de la 2da.

CDM
14 de Febrero del 2005
Para que la solucion que te aporto te sea valida, se deben dar las siguientes premisas:
1 - que las tablas tengan una clave primaria unica
2 - que tengan pocos campos, sino es un poco pesada de escribir

La idea es codificar una instruccion SQL que realice una combinacion FULL OUTER JOIN entre las dos tablas con la clausula WHERE comparando campo a campo.
Ejemplo: para una tabla con un campo Clave unica (ID) y dos campos (C1, C2) la instruccion sería como sigue:

select * from cdm_t1 a full outer join cdm_t2 b on a.id = b.id
where isnull(a.id, 99999) <> isnull(b.id, 99999)
or a.c1 <> b.c1 or a.c2 <> b.c2

Tienes que tener en cuenta en la clausula WHERE que el primer campo comparado es la Clave Unica, que nos va a permitir seleccionar las Altas y Bajas, pero para ello debemos proporcionar un valor de sustitucion al NULL(funcion ISNULL), de no hacerlo así no las detectaria ya que los valores NULL nunca coinciden con ningun valor en una comparación.
En el resto de campos a comparar tambien teneis que tener en cuenta si permitis valores nulo para realizar la misma operacion de sustituir el valor nulo por cualquier otro valor para que se pueda realizar la comparacion.

Espero que os sirva de algo, hasta pronto