sql >> Base de Datos >  >> RDS >> Sqlserver

Buscar filas modificadas (clave compuesta con valores nulos)

ANSI SQL tiene el IS [NOT] DISTINCT FROM construcción que aún no se ha implementado en SQL Server (Solicitud de conexión ).

Es posible simular esta funcionalidad en SQL Server usando EXCEPT /INTERSECT sin embargo. Ambos tratan NULL como iguales en las comparaciones. Desea encontrar filas donde las columnas clave sean las mismas pero las columnas de valor sean diferentes. Así que esto debería funcionar.

SELECT *
FROM   SourceTable S
       JOIN DestinationTable D
         ON S.Key1 = D.Key1
            /*Join the key columns on equality*/
            AND NOT EXISTS (SELECT S.Key2,
                                   S.Key3
                            EXCEPT
                            SELECT D.Key2,
                                   D.Key3)  
             /*and the value columns on unequality*/
            AND NOT EXISTS (SELECT S.Value1,
                                   S.Value2
                            INTERSECT
                            SELECT D.Value1,
                                   D.Value2)