我寫的觸發器來檢測在數據庫領域的變化,看來我要做真正討厭的東西像爲什麼NULL字段被調用相等?
(SELECT SalesPrice FROM __old) <> (SELECT SalesPrice FROM __new)
or ((SELECT SalesPrice FROM __old) IS NULL and (SELECT SalesPrice FROM __new) IS NOT NULL)
or ((SELECT SalesPrice FROM __old) IS NOT NULL and (SELECT SalesPrice FROM __new) IS NULL)
,而不是僅僅
(SELECT SalesPrice FROM __old) <> (SELECT SalesPrice FROM __new)
準確地檢測一個字段改變。
我錯過了什麼,或者Advantage有效地聲稱NULL ==任何值?這種行爲有充分的理由嗎?這是SQL定義中的一些奇怪的事情嗎?有沒有更簡潔的方式,這不會做3檢查代替嗎?
這不是不幸;它非常有意義。如果兩列沒有價值,那麼這些不存在的值如何比較相等?你會發現與IEEE NaN值相同的東西。 –
@Tomalak我的問題是,當一列NULL,SQL有效地說,它是等於一切。我知道SQL並不完全是一種編程語言,但它使用了許多語言,它們都假定NULL == NULL,沒有別的東西,所以你可以從可能彈出NULL的比較中得到一個合理的結果。 –
@埃德加 - 是的,不允許空值可以在某些情況下工作,但有0和沒有決定(例如)之間的差異。但是,如果IFNULL能夠很好地工作,我可以輕鬆找到合適的無效值用於比較。謝謝。 –