ANSI SQL има IS [NOT] DISTINCT FROM
конструкция, която все още не е внедрена в SQL Server (Заявка за свързване
).
Възможно е да симулира тази функционалност
в SQL Server с помощта на EXCEPT
/INTERSECT
въпреки това. И двете третират NULL
като равни в сравненията. Искате да намерите редове, където ключовите колони са еднакви, но колоните със стойности са различни. Така че това трябва да го направи.
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)