Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Rechercher les lignes modifiées (clé composée avec des valeurs nulles)

ANSI SQL a le IS [NOT] DISTINCT FROM construction qui n'a pas encore été implémentée dans SQL Server (Demande de connexion ).

Il est possible de simuler cette fonctionnalité dans SQL Server en utilisant EXCEPT /INTERSECT toutefois. Les deux traitent NULL comme égaux dans les comparaisons. Vous souhaitez rechercher des lignes où les colonnes de clé sont identiques mais les colonnes de valeur sont différentes. Donc ça devrait le faire.

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)