2016-08-02 3 views
0

조건이 충족 될 경우에만 열을 업데이트하려고합니다. 그래서 열 "유형"에 대한, 나는 그것의 값을 "MongoDB를"을 변경하려면 현재 값이 "MongoDB를"이 아닌 경우에만 해당이 내가 사용하고 무엇을 :SQL : 조건이 충족되는 경우에만 필드 업데이트

UPDATE Report 
    SET Type = 
    CASE 
     WHEN Type <> 'MongoDB' THEN 'MongoDB' 
     ELSE Type 
    END 
    WHERE Id = x 

문제는 : 도 유형 인 경우 "MongoDB를"나는 여전히 내 SQL 결과에

(영향 1 행 (들))

를 참조하십시오. 이 연습의 요점은 필요가 없을 때 db 작업을 줄이는 것이 었습니다. 조건이 충족되지 않은 경우 레코드를 수정하는 이유는 무엇입니까?

감사합니다.

+5

왜'WHERE' 절에'Type <> 'MondoDB''를 추가하지 않겠습니까? –

+3

'CASE' 문은 영향을받는 레코드를 변경하지 않을 것입니다. 그들이 어떻게 영향을 받는지. 대신 WHERE 레코드가 속한 WHERE 절에서 레코드가 영향을받을 기준을 고수하십시오. – JNevill

+0

@AnthonyForloney 나는 그것을 생각하지 않았다는 것을 믿을 수 없다. 감사! – 90abyss

답변

5

왜 이렇게 단순화하지 않습니까?

UPDATE Report 
SET Type = 'MongoDB' 
WHERE Id = x AND Type <> 'MongoDB' 

하지만 질문에 대답하기 위해 기존 값으로 설정 한 경우에도 여전히 레코드 값을 설정하고 있습니다. 레코드는 또한 where 절에서 다시 제공되므로 CASE 문과 관계없이 항상 1 행이 영향을받습니다.

관련 문제