Nur ein wenig adjustement diejenigen, die später kommen fors:
Der Gleichheitsoperator generieren einen unknow Wert, wenn es eine Null ist und der unbekannte Wert ist ein falsch behandelt. Nicht (unbekannt) ist unbekannt
Im folgenden Beispiel versuche ich zu sagen, ob ein Paar (a1, b1) gleich (a2, b2) ist. Beachten Sie, dass jede Spalte 3 Werte 0, 1 und NULL hat.
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
beachte hier, dass wir Ergebnisse erwarten:
- Equal null sein
- nicht gleich sein, nicht gleich
- verschiedenen, unterschiedlich zu sein
aber wir bekommen ein anderes Ergebnis
- Gleich ist Null OK
- Nicht gleich ist null ???
- Verschiedene unterscheidet
Siehe auch: http://stackoverflow.com/questions/723195/should-i-use-or-for-not-equal-in-tsql – Dinah