Doar puțină adaptare îi solicită pe cei care vin mai târziu:
Operatorul de egalitate generează o valoare necunoscută atunci când există o nulă
iar valoarea necunoscută este tratată ca fiind falsă.
Nu (necunoscut) este necunoscut
În exemplul de mai jos, voi încerca să spun dacă un cuplu (a1, b1) este egal cu (a2, b2).
Rețineți că fiecare coloană are 3 valori 0, 1 și NULL.
DECLARE @t table (a1 bit, a2 bit, b1 bit, b2 bit)
Insert into @t (a1 , a2, b1, b2)
values( 0 , 0 , 0 , NULL )
select
a1,a2,b1,b2,
case when (
(a1=a2 or (a1 is null and a2 is null))
and (b1=b2 or (b1 is null and b2 is null))
)
then
'Equal'
end,
case when not (
(a1=a2 or (a1 is null and a2 is null))
and (b1=b2 or (b1 is null and b2 is null))
)
then
'not Equal'
end,
case when (
(a1<>a2 or (a1 is null and a2 is not null) or (a1 is not null and a2 is null))
or (b1<>b2 or (b1 is null and b2 is not null) or (b1 is not null and b2 is null))
)
then
'Different'
end
from @t
Rețineți că aici așteptăm rezultatele:
- Egal să fie null
- nu este egal să nu fie
egal
- diferit de diferent
dar obținem un alt rezultat
- Egal este OK null
- Nu este egal nulă
- Diferitele sunt diferite