2012-09-07 93 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 
    ) 

这应尽量减少触发的调用。