2012-09-07 91 views
1

我有一個要求在更新表中一列,如果列具有被不喜歡輸入空值或值更新列。如何根據條件

是否有可能做一個單一的SQL查詢?我的數據庫是DB2

我曾嘗試下面的一個,但即使變化是不存在的,它正在更新。我不想那樣。

UPDATE ABC 
SET AG = CASE 
    WHEN AG IS NULL 
    OR AG <> 1000010 
    THEN 1000010 
    ELSE AG 
END, 
    P = CASE 
    WHEN P IS NULL 
    OR P <> 1235 
    THEN 1235 
    ELSE P 
END 
WHERE c = 607 
+2

我很抱歉,但究竟這不同於只是'UPDATE ABC SET AG = 1000010,P = 1235'? – raina77ow

+0

有沒有你不想要更新已經有值行的原因是什麼?你是否試圖避免執行數據庫觸發器?無論如何,我認爲兩條更新聲明可能是最好的選擇。 – mwolfetech

+0

或者,你是否正在更新另一列(如update_timestamp)?無論哪種方式,我建議編輯你的SQL來更好地模擬你的實際問題。 – mwolfetech

回答

1

嘗試移動條件的WHERE子句:

UPDATE ABC 
SET AG = 1000010 , 
    P = 1235 
WHERE c = 607 and 
     (AG IS NULL OR AG <> 1000010 or 
     P is NULL or P <> 1235 
    ) 

這應儘量減少觸發的調用。