Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Trova le righe modificate (chiave composita con valori null)

ANSI SQL ha il IS [NOT] DISTINCT FROM costrutto che non è stato ancora implementato in SQL Server (Richiesta di connessione ).

È possibile simula questa funzionalità in SQL Server utilizzando EXCEPT /INTERSECT però. Entrambi trattano NULL uguale nei confronti. Vuoi trovare righe in cui le colonne chiave sono le stesse ma le colonne dei valori sono diverse. Quindi questo dovrebbe farlo.

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)