2013-11-02 48 views
1

我遇到由三列IDKEYVALUE 現在我想根據與該行相關的KEY列更新該表的特定行SQL表的多個列。單更新查詢修改多個條件SQL

我試過以下UPDATE查詢更新單個更新查詢中的多個行。

UPDATE TABLE_NAME 
SET VALUE=(CASE WHEN [KEY]='KEY1' THEN 'VALUE 1 MODIFIED' 
       WHEN [KEY]='KEY3' THEN 'VALUE 3 MODIFIED' 
      END) 

但是這個查詢用NULL更新了不匹配的行,如下圖所示。

enter image description here

是他們寫單UPDATE查詢修改根據不同的條件不同列任何其他方式?

+1

您需要在'CASE'語句中包含'ELSE VALUE END'。如果沒有'when'匹配,'CASE'返回null。 –

回答

1
UPDATE TABLE_NAME 
SET VALUE=(CASE WHEN [KEY]='KEY1' THEN 'VALUE 1 MODIFIED' 
       WHEN [KEY]='KEY3' THEN 'VALUE 3 MODIFIED' 
      ELSE '' 
      END) 

這會將不匹配的行設置爲空字符串'',但如果需要,可以設置默認值。但是如果你想讓這個專欄保留它的價值,那麼你可以這樣。

UPDATE TABLE_NAME 
SET VALUE=(CASE WHEN [KEY]='KEY1' THEN 'VALUE 1 MODIFIED' 
       WHEN [KEY]='KEY3' THEN 'VALUE 3 MODIFIED' 
      ELSE VALUE 
      END) 
+1

我更喜歡這樣的: UPDATE TABLE_NAME SET VALUE =(CASE WHEN [KEY] ='KEY1'THEN'VALUE 1 MODIFIED' WHEN [KEY] ='KEY3'THEN'VALUE 3 MODIFIED' END)where KEY ('KEY1','KEY2') ,因爲此查詢只會更新所需的兩條記錄。所以,如果KEY列索引,它會更快。避免在其他部分保留舊的值,從而導致更好的性能。 –