Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Localizar linhas alteradas (chave composta com nulos)


ANSI SQL tem o IS [NOT] DISTINCT FROM construção que ainda não foi implementada no SQL Server (Solicitação de conexão ).

É possível simular esta funcionalidade no SQL Server usando EXCEPT /INTERSECT Contudo. Ambos tratam NULL igual nas comparações. Você deseja encontrar linhas em que as colunas-chave sejam as mesmas, mas as colunas de valor sejam diferentes. Então isso deve fazê-lo.
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)