Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Geänderte Zeilen finden (zusammengesetzter Schlüssel mit Nullen)

ANSI SQL hat den IS [NOT] DISTINCT FROM Konstrukt, das noch nicht in SQL Server implementiert wurde (Verbindungsanfrage ).

Es ist möglich, diese Funktionalität simulieren in SQL Server mit EXCEPT /INTERSECT jedoch. Beide behandeln NULL im Vergleich gleich. Sie möchten Zeilen finden, in denen die Schlüsselspalten gleich sind, die Wertspalten jedoch unterschiedlich sind. Das sollte also reichen.

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)